मैंने इंटरफ़ेस बिल्डर के माध्यम से एक स्विफ्ट शब्दकोश मूल्य में एक टेक्स्टफील्ड बांध दिया था। टेक्स्टफील्ड में सही मूल्य शब्दकोष से खींचा जाता है और टेक्स्टफील्ड में प्रदर्शित होता है।
जब मैं इस माध्यम से तत्व में तत्व का मूल्य बदलता हूं
myDict["Textfield1"] = "New value"
टेक्स्टफील्ड में परिवर्तन दिखाई नहीं दे रहा है। जब मैं किसी वर्ग की संपत्ति में टेक्स्टफील्ड के मान को बांधता हूं, तो इस संपत्ति में कोई भी परिवर्तन तुरंत टेक्स्टफील्ड में दिखाई देता है। क्या मैं कुछ भूल रहा हूँ?
धन्यवाद!
उत्तर:
उत्तर № 1 के लिए 1तो मूल रूप से, यह "काम नहीं जीता। बाइंडिंग केवीओ / केवीएन सिस्टम का उपयोग करके काम करती है, जो ओब्जे-सी ऑब्जेक्ट्स अपना मूल्य बदलते समय अधिसूचनाएं भेजती है। यह बहुत चालाक है, लेकिन उन्होंने इसे स्विफ्ट करने के लिए बंदरगाह नहीं किया। उसमें जोड़ने के लिए, स्विफ्ट में शब्दकोश मूल्य प्रकार हैं।
"समाधान" यह सुनिश्चित करना है कि आप जिस चीज से बंधे हैं वह केवीओ है। तो वहां कुछ चीजें हैं जो आप कर सकते हैं। सबसे पहले अपनी कक्षा बनाना और उसे उप-वर्ग बनाना है NSObject
, और प्रतिष्ठा, आप केवीओ मिलता है। यहाँ एक पृष्ठ है यह कैसे करें।
लेकिन बेहतर तरीका है इसका उपयोग करना dynamic
आपके स्विफ्ट संग्रह पर कीवर्ड, myDict
। यह ओब्जे-सी में ब्रिजिंग को ट्रिगर करता है, और इसलिए आपको केवीओ मिल जाता है। अब मैंने इसे एक स्विफ्ट dict के साथ उपयोग नहीं किया है, इसलिए मुझे पूरा यकीन नहीं है कि क्या होगा। आपको इसे बनाना पड़ सकता है myDict
एक एनएस डिक्शनरी लेकिन यह एक मामूली परिवर्तन है, तो निश्चित रूप से दे दो dynamic
एक कोशिश!