web-dev-qa-db-ja.com

Swift 2:OBJC_ASSOCIATION_RETAIN_NONATOMIC未解決の識別子の使用

プロジェクトをSwift 2に更新しました。

私は自分のSwiftクラスの1つで、ObjCアソシエーションを使用しています。

私は以下を持っています:

_objc_AssociationPolicy( OBJC_ASSOCIATION_RETAIN_NONATOMIC)
_

更新以降、コンパイラは_Use of unresolved identifier 'OBJC_ASSOCIATION_RETAIN_NONATOMIC'_を返します。

理由は何ですか?


編集:同じ問題を抱えている人のために、一時的な修正は定数をその値に置き換えることです。 1:objc_AssociationPolicy( rawValue: 1 )

23

Obj c runtime 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の単なるtypealiasでした-'OBJC_ASSOCIATION_RETAIN_NONATOMIC '、Intをキャストする効果があります)

44
james_alvarez

これを試して:

import ObjectiveC.runtime

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