我有一个符合多种协议的Objective-C变量.
id <NSObject, NSCopying, NSCoding> identityToken;
Run Code Online (Sandbox Code Playgroud)
我如何在Swift中表示这种类型?
Con*_*nor 146
这应该工作:
var identityToken: NSObjectProtocol & NSCopying & NSCoding
Run Code Online (Sandbox Code Playgroud)
注意你必须在swift中使用NSObjectProtocol而不是NSObject.
以下是一些其他示例:
符合多种协议的对象数组:
var array: [NSObjectProtocol & NSCopying & NSCoding]
Run Code Online (Sandbox Code Playgroud)
具有符合多个协议的参数的函数:
func foo(param: NSObjectProtocol & NSCopying & NSCoding) {
}
Run Code Online (Sandbox Code Playgroud)
对于3.1之前的Swift版本,请使用:
var identityToken: (NSObjectProtocol, NSCopying, NSCoding)
Run Code Online (Sandbox Code Playgroud)
Kal*_*zem 10
斯威夫特3
var idToken: NSObjectProtocol & NSCopying & NSCoding
func foo(_ delegateAndDataSource: UICollectionViewDelegate & UICollectionViewDataSource) { ... }
Run Code Online (Sandbox Code Playgroud)
似乎您还可以为复合协议键入别名,如果您计划多次使用相同的协议组合,这可能会派上用场。
typealias IDToken = NSObjectProtocol & NSCopying & NSCoding
Run Code Online (Sandbox Code Playgroud)
与接受的答案中给出的示例相同,使用类型别名:
var idToken: IDToken
var array: [IDToken] = []
func foo(param: IDToken) { ... }
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
20855 次 |
最近记录: |