在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