/ / उदाहरण निजी संपत्ति प्राप्त करने के लिए स्विफ्ट एक्सटेंशन - तेज़, abaddressbook, तेजी से एक्सटेंशन

उदाहरण निजी संपत्ति प्राप्त करने के लिए स्विफ्ट एक्सटेंशन - तेज़, abaddressbook, तेजी से एक्सटेंशन

मैं उपयोग कर रहा हूँ इस ओपन सोर्स लाइब्रेरी जो एड्रेसबुक.फ्रेमवर्क पर एक रैपर है। संपर्क हटाने के लिए कोई विधि नहीं है, इसलिए मैं डिफ़ॉल्ट का उपयोग कर रहा हूं ABAddressBookRemoveRecord। हालांकि इसके लिए मुझे चाहिए ABAddressBookRef.

चूंकि इसे घोषित किया गया है APAddressBook.m उस की फाइल APAddressBook लाइब्रेरी के रूप में @property (nonatomic, readonly) ABAddressBookRef addressBook; और मैं इसे एक्सेस नहीं कर पा रहा हूं, मैं स्विफ्ट में विस्तार लिखना चाहता हूं, जिसमें इसे वापस करने की विधि शामिल है।

तो यह मेरे विस्तार का शरीर है:

extension APAddressBook {
private struct AssociatedKey {
static var addressBookRef = "addressBook"
}

var xo: ABAddressBook! {
get {
return objc_getAssociatedObject(self, &AssociatedKey.addressBookRef)
}
set(newValue) {
objc_setAssociatedObject(self, &AssociatedKey.addressBookRef, newValue, objc_AssociationPolicy(OBJC_ASSOCIATION_RETAIN))
}
}

func getABAddressBook() -> ABAddressBookRef {
return self.xo
}

}

मैंने भी प्रयोग करने की कोशिश की है private var xoAssociationKey: UInt8 = 0 के रूप में जुड़े, लेकिन कॉलिंग getABAddressBook() समारोह हमेशा के साथ दुर्घटनाग्रस्त हो जाता है fatal error: unexpectedly found nil while unwrapping an Optional value.

मेरे कोड के साथ क्या गलत है? मेरी समस्या को हल करने का बेहतर तरीका भी है?

उत्तर:

जवाब के लिए 0 № 1

वैसे शायद यह आपके प्रश्नों का उत्तर नहीं है लेकिन यहां कुछ विचार हैं।

आप केवल इतना जानते हैं कि क्या पास करना है obc_objc_getAssociatedObject क्योंकि आपका lib खुला स्रोत है।

तो आप इसका इस्तेमाल अपनी आवश्यकताओं के तहत फिट करने के लिए क्यों नहीं करेंगे?

अगर मैं आप थे तो मैं उस संपत्ति को सार्वजनिक पहुंच में ले जाउंगा। मुझे निजी संपत्ति तक पहुंचने की कोशिश करने से यह वास्तव में एक बुरा समाधान नहीं मिला है obc_ तरीकों।

आपके प्रश्न के बारे में आपने पता पुस्तिकाRef को निर्दिष्ट करने का प्रयास किया था : NSString? चूंकि ऐप्पल ने अब तेजी से स्ट्रिंग और एनएसएसटींग को दो अलग-अलग प्रकार बनाये हैं।