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

23

我刚将我的项目升级到Swift 2。

在我的一个Swift类中,我使用了ObjC关联。

我有以下内容:

objc_AssociationPolicy( OBJC_ASSOCIATION_RETAIN_NONATOMIC)
自从更新后,编译器返回“使用未解决的标识符 'OBJC_ASSOCIATION_RETAIN_NONATOMIC'”。任何想法为什么会这样?
编辑: 对于那些有同样问题的人,一个临时修复方法是用其值替换常量,即1:objc_AssociationPolicy( rawValue: 1 )

可能是Swift 2.0复制OBJC_ASSOCIATION_RETAIN的重复问题。 - Mick MacCallum
2个回答

44

如果你查看 obj c runtime 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 的 typealias - 其效果是将 'OBJC_ASSOCIATION_RETAIN_NONATOMIC' 强制转换为 Int)


0

试试这个:

import ObjectiveC.runtime

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接