在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