web-dev-qa-db-fra.com

Swift 2: OBJC_ASSOCIATION_RETAIN_NONATOMIC utilisation d'identificateur non résolu

Je viens de mettre à jour mon projet à Swift 2.

J'utilise l'un des membres de ma classe Swift avec l'association ObjC.

J'ai le suivant:

objc_AssociationPolicy( OBJC_ASSOCIATION_RETAIN_NONATOMIC)

Depuis la mise à jour, le compilateur renvoie Use of unresolved identifier 'OBJC_ASSOCIATION_RETAIN_NONATOMIC'.

Une idée pourquoi?


Edit: Pour ceux qui ont le même problème, une solution temporaire consisterait à remplacer la constante par sa valeur, à savoir. 1: objc_AssociationPolicy( rawValue: 1 )

23
Matthieu Riegler

Si vous regardez l'en-tête Swift du runtime obj c, il apparaît que cette construction est devenue une énumération:

/**
 * 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
}

Vous pouvez donc remplacer par: objc_AssociationPolicy.OBJC_ASSOCIATION_RETAIN_NONATOMIC.

Si vous avez besoin du jeton en tant que UInt, vous pouvez toujours utiliser .rawValue.

(Dans la version précédente, objc_AssociationPolicy était juste un typealias pour UInt - avec pour effet de transtyper 'OBJC_ASSOCIATION_RETAIN_NONATOMIC', un Int)

42
james_alvarez

Essaye ça:

import ObjectiveC.runtime

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