2017-03-18 13 views
5

नमस्ते मेरी समस्या, सरल मैं लगातार जांच करने के लिए है कि क्या एक bool का मूल्य सही या गलत है तो मैं अब तक की कोशिश की है उपयोग करने के लिए है: स्विफ्ट मेंमैं लगातार जांच कैसे कर सकता हूं कि बूल का मूल्य सही/गलत है या नहीं? स्विफ्ट

override func update(_ currentTime: TimeInterval) 

समारोह और इसे करने के लिए रास्ता है तेज़ और एक बार जब यह मानों की जांच करता है तो यह लगातार कार्रवाई को दोहराएगा, भले ही मैं केवल एक बार कार्रवाई करने की इच्छा रखूं, इसलिए मूल रूप से मैं जो कह रहा हूं वह यह है कि मैं यह करना चाहता हूं कि बूल मान सही है या नहीं या एक बार झूठी और फिर फिर से बदलते समय जांच बंद करो। कृपया मदद करें, धन्यवाद।

+0

आप में थोड़ा और अधिक व्याख्या कर सकते हैं, कृपया? Bool_ का यह _value क्या है? क्या यह एक ही कक्षा में या कुछ और संपत्ति है? – ziya

उत्तर

5

संपत्ति पर्यवेक्षकों

आप स्विफ्ट में संपत्ति पर्यवेक्षकों का उपयोग कर सकते पूरा करने के लिए आपको क्या चाहिए ... यहाँ डॉक्स इन के बारे में क्या कहते हैं:

संपत्ति पर्यवेक्षकों का पालन करेंगे और एक में परिवर्तनों का जवाब संपत्ति का मूल्य। संपत्ति पर्यवेक्षकों को प्रत्येक बार संपत्ति का मूल्य सेट कहा जाता है, भले ही नया मान संपत्ति के वर्तमान मान के समान हो।

  • willSet कहा जाता है बस से पहले मूल्य संग्रहीत किया जाता है:

willSet और didSet संपत्ति पर्यवेक्षकों रहे हैं।

  • नए मूल्य को संग्रहीत करने के तुरंत बाद डीडसेट को कॉल किया जाता है।

  • अपनी समस्या को हल करने के लिए आपको कुछ इस तरह कर सकता है:

    var myProperty:Int = 0 { 
    
         willSet { 
          print("About to set myProperty, newValue = \(newValue)") 
         } 
    
         didSet{ 
          print("myProperty is now \(myProperty). Previous value was \(oldValue)") 
         } 
        } 
    

    आप या तो एक या एक से अपनी संपत्ति पर संपत्ति पर्यवेक्षकों के दोनों लागू कर सकते हैं।

    getters और setters

    एक विकल्प के रूप में, आप अपनी समस्या को हल करने के लिए एक संग्रहीत संपत्ति पर getters और setters उपयोग कर सकते हैं:

    private var priv_property:Int = 0 
    
    var myProperty:Int{ 
    
        get { 
         return priv_property 
        } 
    
        set { 
         priv_property = newValue 
        } 
    } 
    

    गणना गुण वास्तव में एक मूल्य की दुकान नहीं है। इसके बजाय, वे अप्रत्यक्ष रूप से अन्य गुणों और मूल्यों को पुनर्प्राप्त करने और सेट करने के लिए एक गेटर और वैकल्पिक सेटटर प्रदान करते हैं।

    -1

    आपको पर्यवेक्षकों या कॉलबैक का उपयोग करना चाहिए। नीचे टिप्पणियां पढ़ें और @ वाइरविंड का जवाब देखें। नीचे दिया गया समाधान वास्तव में अनुशंसित नहीं है क्योंकि यह अक्षम होगा और आपके कोड को जटिल कर सकता है। लेकिन अगर आप चाहते थे या update() में ऐसा करने की जरूरत है, तो यहां मैं यह कर करेंगे:,

    // Assume stored property 
    // It might be an API call and so on 
    var boolToWatch = false 
    
    var lastValueOfWatchedBool: Bool? 
    var lastCheck: TimeInterval = 0 
    let checkInterval = 1.0 // check every second 
    
    override func update(_ currentTime: TimeInterval) { 
    
        // In case boolToWatch is an expensive API call might be good to 
        // check less frequently 
        if currentTime - lastCheck > checkInterval { 
         lastCheck = currentTime 
    
         // Check for the initial case 
         if lastValueOfWatchedBool == nil { 
          lastValueOfWatchedBool = boolToWatch 
         } 
    
         // Detect change 
         if boolToWatch != lastValueOfWatchedBool { 
          lastValueOfWatchedBool = boolToWatch 
    
          // Do what you need to do when the value changed here 
          print("I feel different!") 
         } 
        } 
    } 
    
    +1

    संपत्ति पर्यवेक्षक वे ऐसा करने का तरीका हैं। वाइरविंड का जवाब देखें। –

    +1

    @SteveIves मुझे पता है, लेकिन आप इसे मान रहे हैं _is_ एक ही संपत्ति पर एक संपत्ति को उत्परिवर्तित किया जा रहा है। यह एक मूल्य हो सकता है जो एक महंगी एपीआई कॉल का परिणाम है। – ziya

    +0

    @MaxwellTroyMiltonKing एक महंगी API कॉल के प्रकार पर निर्भर करता है, यह उदाहरण के लिए एक पूरा होने हैंडलर हो सकता है, या एक बार यह किया है बारे में सूचना पोस्ट कर सकते हैं, या अपने didSet पर्यवेक्षक आह्वान करने के लिए ... बिंदु है कुछ संपत्ति सेट कर सकते हैं, तो आप परिवर्तन के लिए निरंतर (हर सेकेंड भी नहीं) की जांच करने की आवश्यकता नहीं है, बल्कि केवल एक बार कार्यवाही करने के लिए जब संपत्ति का मूल्य वास्तव में बदल दिया गया है (जो ओपी के प्रश्न के आधार पर, वह किस बारे में रूचि रखता था)। – Whirlwind

    संबंधित मुद्दे

     संबंधित मुद्दे