J’ai une variable Objective-C conforme à plusieurs protocoles.
id identityToken;
Comment pourrais-je représenter ce type dans Swift?
Cela devrait fonctionner:
var identityToken: NSObjectProtocol & NSCopying & NSCoding
Notez que vous devez utiliser NSObjectProtocol au lieu de NSObject dans swift.
Voici quelques exemples supplémentaires:
Tableau d’objects conformes à plusieurs protocoles:
var array: [NSObjectProtocol & NSCopying & NSCoding]
Fonction avec un paramètre conforme à plusieurs protocoles:
func foo(param: NSObjectProtocol & NSCopying & NSCoding) { }
Pour la version de Swift antérieure à 3.1, utilisez:
var identityToken: (NSObjectProtocol, NSCopying, NSCoding)
Swift 3
var idToken: NSObjectProtocol & NSCopying & NSCoding func foo(_ delegateAndDataSource: UICollectionViewDelegate & UICollectionViewDataSource) { ... }
La réponse ci-dessus de conner est correcte, mais vous devez souvent implémenter un protocole distinct qui hérite des autres protocoles, et vous permet plus de flexibilité si vous souhaitez append des méthodes de protocole supplémentaires ultérieurement ou modifier les protocoles de niveau supérieur.
internal protocol MyOtherProtocol : NSObjectProtocol, NSCopying, NSCoding { func someOtherNecessaryMethod() }
Puis utilisé:
var identityToken : MyOtherProtocol