我正在扩展 Swift 2.0 中的一些类以与 ReactiveCocoa 3.0(swift-2.0 分支)一起使用,但遇到了一些麻烦。
我已经关注科林了艾伯哈特的教程 http://blog.scottlogic.com/2015/05/15/mvvm-reactive-cocoa-3.html,并复制粘贴了他的一些UIKit扩展逻辑 https://github.com/ColinEberhardt/ReactiveTwitterSearch/blob/master/ReactiveTwitterSearch/Util/UIKitExtensions.swift转到我的 OS X 应用程序。除了这个属性之外,一切都编译得很好:UInt(OBJC_ASSOCIATION_RETAIN)
,这给了我以下编译器错误。
使用未解析的标识符
我如何访问该房产?我尝试过import ObjectiveC
and #import <objc/runtime.h>
在头文件中,但似乎没有任何作用。
func lazyAssociatedProperty<T: AnyObject>(host: AnyObject, key: UnsafePointer<Void>, factory: ()->T) -> T {
return objc_getAssociatedObject(host, key) as? T ?? {
let associatedProperty = factory()
objc_setAssociatedObject(host, key, associatedProperty, UInt(OBJC_ASSOCIATION_RETAIN)) // <-- Use of unresolved identifier
return associatedProperty
}()
}
这实际上现在作为一个名为的枚举导入到 Swift 中objc_AssociationPolicy
。定义:
enum objc_AssociationPolicy : UInt {
case OBJC_ASSOCIATION_ASSIGN
case OBJC_ASSOCIATION_RETAIN_NONATOMIC
case OBJC_ASSOCIATION_COPY_NONATOMIC
case OBJC_ASSOCIATION_RETAIN
case OBJC_ASSOCIATION_COPY
}
这意味着它可以按如下方式使用。
objc_setAssociatedObject(host, key, associatedProperty, objc_AssociationPolicy.OBJC_ASSOCIATION_RETAIN)
或者使用枚举简写语法。
objc_setAssociatedObject(host, key, associatedProperty, .OBJC_ASSOCIATION_RETAIN)
注意objc_setAssociatedObject
也已更新以采取objc_AssociationPolicy
论证而不是UInt
使得没有必要访问枚举rawValue
here.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)