这个问题已经有了答案:
Swift 3 unable to append array of objects, which conform to a protocol, to a collection of that protocol
2个答案
swift - 无法将类型“[MyProtocol]”的值转换为预期的参数类型“inout _”-LMLPHP
我试图找出是什么导致了这一切,但我失败了,是不是出了什么事?
还有人遇到过这样的错误吗?
我该怎么办,我需要帮助
这是我的代码:

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]

10-08 15:43