Chr*_*ris 5 objective-c-runtime swift swift2
我正在扩展Swift 2.0中的一些类来使用ReactiveCocoa 3.0(swift-2.0分支),但是遇到了一些麻烦.
我跟随了Colin Eberhardt的教程,并将他的部分UIKit扩展逻辑复制粘贴到我的OS X应用程序中.除了这个属性之外,它都编译得很好:UInt(OBJC_ASSOCIATION_RETAIN),这给了我以下编译器错误.
使用未解析的标识符
我怎样才能访问这个属性?我试过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
}()
}
Run Code Online (Sandbox Code Playgroud)
Mic*_*lum 17
这实际上现在作为枚举命名导入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
}
Run Code Online (Sandbox Code Playgroud)
意思是它可以如下使用.
objc_setAssociatedObject(host, key, associatedProperty, objc_AssociationPolicy.OBJC_ASSOCIATION_RETAIN)
Run Code Online (Sandbox Code Playgroud)
或者使用枚举速记语法.
objc_setAssociatedObject(host, key, associatedProperty, .OBJC_ASSOCIATION_RETAIN)
Run Code Online (Sandbox Code Playgroud)
请注意,objc_setAssociatedObject也已更新为objc_AssociationPolicy参数而不是UInt不必在rawValue此处访问枚举.
| 归档时间: |
|
| 查看次数: |
2630 次 |
| 最近记录: |