我扩展一些类在@H_403_2@Swift2.0 工作与 ReactiveCocoa 3.0 (swift 2.0 分支),但遇到了一些问题。
我跟随科林 ·艾伯哈特的教程,和有复制粘贴一些他UIKit 扩展逻辑结束对我的 OS X 应用程序。它所有的编译很好,除了此属性:@H_403_2@UInt(OBJC_ASSOCIATION_RETAIN),这给了我以下的编译器错误。
使用的未解析的标识符
如何访问此属性?我一直对@H_403_2@import ObjectiveC和@H_403_2@#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 }() }
解决方法 1:
这是实际上现在导入@H_403_2@Swift作为枚举命名为@H_403_2@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,objc_AssociationPolicy.OBJC_ASSOCIATION_RETAIN)
或与枚举速记语法。
objc_setAssociatedObject(host,.OBJC_ASSOCIATION_RETAIN)
请注意,@H_403_2@objc_setAssociatedObject也已更新,采取@H_403_2@objc_AssociationPolicy参数来代替@H_403_2@UInt使它没有必要再访问枚举的@H_403_2@rawValue在这里。