假设我有以下内容:
protocol MyProtocol {
}
struct MyStruct: MyProtocol {
}
var s1 = MyStruct()
var s2 = MyStruct()
var s3 = MyStruct()
var structArray = [s1, s2, s3]
当我尝试将这个结构体数组分配给一个由每个
structArray
结构体都符合的协议数组时:var protocolArray:[MyProtocol] = structArray
我遇到了这个错误:
无法将类型为 '[MyStruct]' 的数组转换为指定类型 '[MyProtocol]'
我本以为,由于数组中的每个对象都符合协议,所以可以说“符合某个协议的结构体数组”可以分配给期望“任何符合该协议的数组”的东西。但是也许当类型为“数组”而不是“东西”时,这种情况不适用,如果这有任何意义的话。例如,这是有效的:
var p1:MyProtocol = s1
因为 s1 符合 MyProtocol
。但如果使用数组,似乎就不再适用。
顺便提一句,这个也可以工作:
var p1Array:[MyProtocol] = [s1, s2, s3]
可能是因为数组的类型被确定为[MyProtocol]
,而不是由先前的某个变量预先确定(就像上面我的示例中一样)。
那么无论如何,所有这些都是要问的:有什么最好的方法来解决这个问题?我如何将符合某个协议的结构体数组分配给另一个类型只是“符合该协议的东西的数组”的数组。
我对Swift还比较新,所以可能会漏掉一些微不足道的东西。