2017-09-28 19 views
5

में कुंजी-मूल्य का निरीक्षण मेरे पास मेरे स्विफ्ट 4 प्रोजेक्ट में निम्न कोड है।स्विफ्ट 4

class DishesTableViewController : UITableViewController { 


    private var token :NSKeyValueObservation? 

    @objc dynamic private(set) var dishes :[Dish] = [] 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     // configure the observation 
     token = self.observe(\.dishes) { object, change in 

      // change is always nil 
      print(object) 
      print(change) 
     } 

     updateTableView() 
    } 

जब भी व्यंजन सरणी बदल जाती है तो अवलोकन ट्रिगर होता है। लेकिन मेरा सवाल यह है कि मैं वास्तविक परिवर्तन कैसे प्राप्त कर सकता हूं। मतलब मैं परिवर्तन को ट्रिगर करने वाले वास्तविक डिश ऑब्जेक्ट तक पहुंच कैसे प्राप्त कर सकता हूं।

उत्तर

4

मुझे लगता है कि changenil के साथ आ रहा है क्योंकि आपने विकल्प निर्दिष्ट नहीं किए हैं।

पुनर्लेखन इस प्रकार है:

override func viewDidLoad() { 
    super.viewDidLoad() 

    // configure the observation 
    token = self.observe(\.dishes, options: [.new,.old]) { object, change in 

     print(object) 
     let set1 = Set(change.newArray!) 
     let set2 = Set(change.oldArray!) 

     let filter = Array(set1.subtract(set2)) 
     print(filter) 

    } 

    updateTableView() 
} 

ध्यान दें कि मैं यहाँ अपने Dish वस्तु के बारे में अटकलबाजी का एक सा किया है। मुझे लगता है कि आपने इसे Equatable प्रोटोकॉल के अनुरूप बना दिया है, और यह समाधान के समाधान के लिए एक आवश्यक कदम है।

+0

मेरे मामले में, 'चेंज हैंडलर' को पूरी तरह से कॉल नहीं किया गया क्योंकि मैंने 'विकल्प' तर्क शामिल नहीं किया था। मैं हर समय इसे शामिल करने का सुझाव दूंगा। –

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