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

Swift 2 : OBJC_ASSOCIATION_RETAIN_NONATOMIC use of unresolved identifier

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

我是我的 swift class 我使用 ObjC 关联。

我有以下内容:

objc_AssociationPolicy( OBJC_ASSOCIATION_RETAIN_NONATOMIC)

自更新以来,编译returnsUse of unresolved identifier 'OBJC_ASSOCIATION_RETAIN_NONATOMIC'

知道为什么吗?


编辑: 对于那些有同样问题的人,一个临时的解决办法是用它的值替换常量,即。 1 : objc_AssociationPolicy( rawValue: 1 )

如果您查看 obj c 运行时 swift header,似乎此构造已成为一个枚举:

/**
 * 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 的效果)

试试这个:

import ObjectiveC.runtime

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