【发布时间】:2016-01-15 21:35:20
【问题描述】:
假设我有以下内容:
protocol MyProtocol {
}
struct MyStruct: MyProtocol {
}
var s1 = MyStruct()
var s2 = MyStruct()
var s3 = MyStruct()
var structArray = [s1, s2, s3]
当我尝试将这个结构数组分配给一个协议数组时(structArray 中的每个结构都符合):
var protocolArray:[MyProtocol] = structArray
我收到此错误:Cannot convert array of type '[MyStruct]' to specified type '[MyProtocol]'
我希望由于数组中的每个对象都符合协议,因此可以说“符合某种协议的结构数组”可以分配给期望“符合该协议的任何东西的数组”的东西协议”。但是,当类型是“数组”而不是“事物”时,也许这并不适用,如果这有意义的话。
例如,这是有效的:
var p1:MyProtocol = s1
因为 s1 符合 MyProtocol。但是如果你使用数组,那么它似乎不再适用了。
顺便说一句,这似乎也有效:
var p1Array:[MyProtocol] = [s1, s2, s3]
大概是因为数组的类型被确定为[MyProtocol],并且不是由之前的某个变量预先确定的(如我上面的示例)。
所以无论如何,所有这些都是要问的:最好的解决方法是什么?如何将一个结构数组(符合某种协议)分配给另一个类型只是“符合该协议的事物的数组”的数组。
我对 Swift 还很陌生,所以我可能会遗漏一些琐碎的事情。
【问题讨论】:
-
有一个关于这个的错误报告。可能是你提交的?如果您没有,您可能有兴趣关注错误报告:bugs.swift.org/browse/…
-
@BarbaraRodeker 我没有存档,但感谢分享链接!