Swift 2:OBJC_ASSOCIATION_RETAIN_NONATOMIC使用未解析的标识符

时间:2015-06-20 23:50:37

标签: swift swift2

我刚刚将我的项目更新为Swift 2.

我的一个快速课程我使用ObjC协会。

我有以下内容:

objc_AssociationPolicy( OBJC_ASSOCIATION_RETAIN_NONATOMIC)

自更新以来,编译器返回Use of unresolved identifier 'OBJC_ASSOCIATION_RETAIN_NONATOMIC'

知道为什么吗?

编辑: 对于那些有相同问题的人来说,临时修复就是将常量替换为其值,即。 1:objc_AssociationPolicy( rawValue: 1 )

2 个答案:

答案 0 :(得分:43)

如果查看obj c运行时swift头文件,看起来这个构造已成为一个枚举:

/**
 * Policies related to associative references.
 * These are options to objc_setAssociatedObject()
 */
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_AssociationPolicy.OBJC_ASSOCIATION_RETAIN_NONATOMIC

如果您需要将令牌作为UInt,则始终可以使用.rawValue。

(在之前的版本中objc_AssociationPolicy只是UInt的一个类型 - 具有投射'OBJC_ASSOCIATION_RETAIN_NONATOMIC',Int)的效果

答案 1 :(得分:0)

试试这个:

import ObjectiveC.runtime

func setOverlay(view: UIView)
{
    objc_setAssociatedObject(self, &AssociatedKeys.overlayKey, view, .OBJC_ASSOCIATION_RETAIN_NONATOMIC)
}