这个问题已经有了答案:
Swift 3 unable to append array of objects, which conform to a protocol, to a collection of that protocol
2个答案
我试图找出是什么导致了这一切,但我失败了,是不是出了什么事?
还有人遇到过这样的错误吗?
我该怎么办,我需要帮助
这是我的代码:
protocol MyProtocol {
}
struct MyStruct: MyProtocol {
}
let structs = [MyStruct(), MyStruct()]
var protocols = [MyProtocol]()
protocols = structs // it's ok
protocols += structs // this got an error
最佳答案
这一行有编译器的魔力:
protocols = structs
它在结构上循环,将每一个装箱成协议容器,然后执行分配。它基本上执行此操作:
protocols = structs.map{ $0 as MyProtocol }
或同等地:
protocols = structs as [MyProtocol]
此编译器魔术不适用于
+=
运算符。不过,你可以自己做:protocols += structs as [MyProtocol]