J'ai une bibliothèque Swift qui dépend fortement de obj.valueForKey()
de NSObject
.
Après la migration vers Swift 4, j'ai constaté que ces appels se bloquent toujours avec l'erreur "cette classe n'est pas conforme au codage de la valeur de clé pour la clé ..." sauf si la propriété que je recherche pour est déclaré avec @objc
.
Est-il désormais obligatoire de déclarer des propriétés avec @objc
pour les trouver avec cette méthode? Y a-t-il une alternative?
Lorsque vous avez effectué la migration, Xcode a demandé des informations sur @objc
inférence et vous avez probablement sélectionné le nouveau type au lieu de Swift3.
Solutions possibles:
@objc
Utilisation @objc
sur chaque méthode, au besoin, au lieu de la classe entière.
@objcMembers
Vous pouvez simplement utiliser @objcMembers
sur la classe.
L'application de l'attribut @objcMembers à une classe ajoute implicitement l'attribut @objc à tous ses membres compatibles Objective-C.
Écriture Swift Classes et protocoles avec comportement Objective-C
Gardez à l'esprit: car l'application de l'attribut @objc peut augmenter la taille compilée d'une application et nuire aux performances, n'appliquer l'attribut @objcMembers sur les déclarations que lorsque chaque membre doit avoir l'attribut @objc appliqué .
Vous pouvez également modifier le comportement du projet sous: Build Settings
> Swift 3 @objc Inference
> On
/Off
Questions connexes: