Swift 2.0复制OBJC_ASSOCIATION_RETAIN

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此处访问枚举.