Swift 2.0 次复制 OBJC_ASSOCIATION_RETAIN
Swift 2.0 replicate OBJC_ASSOCIATION_RETAIN
我正在 Swift 2.0 中扩展一些 类 以与 ReactiveCocoa 3.0(swift-2.0 分支)一起工作,但是 运行 遇到了一些麻烦。
我跟随 Colin Eberhardt's tutorial, and have copy pasted some of his UIKit extension logic 来到了我的 OS X 应用程序。除了这个 属性: UInt(OBJC_ASSOCIATION_RETAIN)
之外,它都编译得很好,这给了我以下编译器错误。
use of unresolved identifier
我如何访问此 属性?我已经尝试在头文件中 import ObjectiveC
和 #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
}()
}
这实际上现在作为一个名为 objc_AssociationPolicy
的枚举导入到 Swift 中。定义:
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)
或使用枚举 shorthand 语法。
objc_setAssociatedObject(host, key, associatedProperty, .OBJC_ASSOCIATION_RETAIN)
请注意,objc_setAssociatedObject
也已更新为采用 objc_AssociationPolicy
参数而不是 UInt
,因此无需在此处访问枚举的 rawValue
。
我正在 Swift 2.0 中扩展一些 类 以与 ReactiveCocoa 3.0(swift-2.0 分支)一起工作,但是 运行 遇到了一些麻烦。
我跟随 Colin Eberhardt's tutorial, and have copy pasted some of his UIKit extension logic 来到了我的 OS X 应用程序。除了这个 属性: UInt(OBJC_ASSOCIATION_RETAIN)
之外,它都编译得很好,这给了我以下编译器错误。
use of unresolved identifier
我如何访问此 属性?我已经尝试在头文件中 import ObjectiveC
和 #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
}()
}
这实际上现在作为一个名为 objc_AssociationPolicy
的枚举导入到 Swift 中。定义:
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)
或使用枚举 shorthand 语法。
objc_setAssociatedObject(host, key, associatedProperty, .OBJC_ASSOCIATION_RETAIN)
请注意,objc_setAssociatedObject
也已更新为采用 objc_AssociationPolicy
参数而不是 UInt
,因此无需在此处访问枚举的 rawValue
。