2015-02-11 24 views
11

मुझे कोई जानकारी नहीं है कि यह संभव है, लेकिन यह मुझे बहुत सारे तनाव और खराब कोड से बचाएगा। जब भी कोई सरणी अपडेट हो जाती है, तो निगरानी करना संभव है? उदाहरण के लिए, विधि ए सरणी a=[1,2,3] से a=[1,2,3,4] को बदलता है, क्या a अपडेट होने पर ट्रिगर होने पर एक प्रकार का प्रतिनिधि होना संभव है?किसी सरणी ऑब्जेक्ट में परिवर्तनों की निगरानी करें

+0

क्यों नमूदार अपने स्वयं के प्रोटोकॉल लागू नहीं और सरणियों बनाने सवाल में उस के अनुरूप है? –

+0

वैकल्पिक रूप से एक रैपर ऑब्जेक्ट बनाएं कि, ऐरे को अपडेट करते समय, एक किया गया चेंजएरे() या एक सार्वजनिक बूल फ़्लिप करता है जिसे आप चेक कर सकते हैं। –

+0

यह बिस्तर के लिए समय है। मैं इसे कल प्रदान करूंगा (जब तक कि कोई और बुद्धिमान बुद्धिमान न हो) –

उत्तर

20

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

var myArray:[Int] = [1, 3, 4] { 
    didSet { 
     println("arrayChanged") 
    } 
} 

यह प्रिंट होगा सरणी बदल अगर मैं एक इंट जोड़ने के लिए, हटाने और इंट, आदि मैं आम तौर पर एक पंक्ति हालांकि पर डाल दिया:

var myArray:[Int] = [1, 3, 4] { didSet { println("arrayChanged") } } 
+0

बिल्कुल जो मैं खोज रहा था, धन्यवाद। –

+0

धन्यवाद, यह बहुत उपयोगी था –

+6

आंतरिक सरणी परिवर्तनों की निगरानी करने का कोई तरीका है? MyArray.append (x) की तरह? –

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