Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
获取实例私有属性的Swift扩展_Swift_Abaddressbook_Swift Extensions - Fatal编程技术网

获取实例私有属性的Swift扩展

获取实例私有属性的Swift扩展,swift,abaddressbook,swift-extensions,Swift,Abaddressbook,Swift Extensions,我正在使用开源库,它是AddressBook.framework上的包装器。没有删除联系人的方法,因此我将使用默认的ABAddressBookRemoveRecord。但是,为此我需要ABAddressBookRef 因为它在该APAddressBook库的APAddressBook.m文件中声明为 @property(非原子,只读)ABAddressBookRef addressBook

我正在使用开源库,它是AddressBook.framework上的包装器。没有删除联系人的方法,因此我将使用默认的
ABAddressBookRemoveRecord
。但是,为此我需要
ABAddressBookRef

因为它在该
APAddressBook
库的
APAddressBook.m
文件中声明为
@property(非原子,只读)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
    }

}
我也尝试过使用
私有变量xoAssociationKey:UInt8=0
作为associatedKey,但调用
getABAddressBook()
函数总是会崩溃,出现
致命错误:在展开可选值时意外发现nil。


我的代码怎么了?还有没有更好的方法来解决我的问题呢?

也许这不是对你问题的特别回答,但这里有一些想法

您只知道在
obc\u objc\u getAssociatedObject
中传递什么,因为您的库是开源的

那你为什么不用它来满足你的需要呢

如果我是你,我会把那房子搬到公共通道。我不觉得这是一个比通过
obc
方法访问私有财产更糟糕的解决方案


关于您的问题,您是否尝试将addressBookRef指定为
:NSString
?因为苹果现在把swift的字符串和NSString做成了两种不同的类型。

Hi,你是说直接编辑库?我肯定在几个小时后就考虑过了:D但从长远来看,这不是最好的解决方案,每次他们更新库时我都会这么做。。。这就是为什么我认为我们有类别/扩展。我不明白那个弦乐部分。。。它与addressBookRef有什么关系?