我正在使用这个开源库,它是 AddressBook.framework 的包装器。没有删除联系人的方法,所以我将使用 default ABAddressBookRemoveRecord
。但是为此,我需要ABAddressBookRef
.
由于它在该库
的APAddressBook.m
文件中声明为并且我无法访问它,因此我想在 Swift 中编写扩展,包含返回它的方法。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
as associatedKey,但调用getABAddressBook()
函数总是崩溃fatal error: unexpectedly found nil while unwrapping an Optional value.
我的代码有什么问题?还有更好的方法来解决我的问题吗?