在swift中符合多个协议的types
我有一个符合多个协议的Objective-Cvariables。
id <NSObject, NSCopying, NSCoding> identityToken; 我将如何在Swift中表示这种types?
这应该工作:
 var identityToken: NSObjectProtocol & NSCopying & NSCoding 
请注意,您必须在swift中使用NSObjectProtocol而不是NSObject。
这里是一些额外的例子:
符合多种协议的对象数组:
 var array: [NSObjectProtocol & NSCopying & NSCoding] 
具有符合多个协议的参数的函数:
 func foo(param: NSObjectProtocol & NSCopying & NSCoding) { } 
对于3.1之前的Swift版本,请使用:
 var identityToken: (NSObjectProtocol, NSCopying, NSCoding) 
Swift 3
 var idToken: NSObjectProtocol & NSCopying & NSCoding func foo(_ delegateAndDataSource: UICollectionViewDelegate & UICollectionViewDataSource) { ... } 
来自conner的上述答案是正确的,但是您经常应该实现一个单独的协议,该协议本身从其他协议inheritance,并且如果您希望稍后添加其他协议方法或更改顶级协议,则允许更多的灵活性。
 internal protocol MyOtherProtocol : NSObjectProtocol, NSCopying, NSCoding { func someOtherNecessaryMethod() } 
然后利用:
 var identityToken : MyOtherProtocol