Luk*_*nek 6 arrays generics protocols ios swift
在Objective-C中,有一种方法可以声明符合类和一组协议的变量,如下所示:
BaseClass<Protocol1, Protocol2> *variable = ...
Run Code Online (Sandbox Code Playgroud)
在Swift中,我想声明一个数组(实际上是一个类的属性),其中包含由此模式定义的类型的元素.
在这个问题中,有一个解决方案,通过使类通用并相应地约束类型来描述独立属性的类型.为了实例化这样的类,有必要指定确切的类型.这对于独立属性来说不是问题,但在数组中应该可以存储具有不同确切类型的元素.
有没有办法在Swift中表达这个?
我刚刚遇到了我的这个老问题,因为自从接受部分答案以来 Swift 语言不断发展,我决定发布另一个答案,它实际上解决了我最初问的问题。
从版本 4 开始,Swift 支持使用符号来组合协议&,也可以使用一种类类型来组合协议。
class BaseClass {}
protocol Protocol1 {}
protocol Protocol2 {}
class ConformingClass1: BaseClass, Protocol1, Protocol2 {}
class ConformingClass2: BaseClass, Protocol1, Protocol2 {}
// It works for a variable holding a single object.
let object: BaseClass & Protocol1 & Protocol2 = ConformingClass1()
// And it also works for a variable holding an array of objects.
let array: [BaseClass & Protocol1 & Protocol2] = [ConformingClass1(), ConformingClass2()]
Run Code Online (Sandbox Code Playgroud)