Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 无法转换类型为';[MyProtocol]';到预期的参数类型';inout';_Swift - Fatal编程技术网

Swift 无法转换类型为';[MyProtocol]';到预期的参数类型';inout';

Swift 无法转换类型为';[MyProtocol]';到预期的参数类型';inout';,swift,Swift,我试图找出这一切发生的原因,但我失败了,有什么不对劲吗 还有其他人遇到过这样的错误吗 我该怎么办,我需要帮助 这是我的代码: protocol MyProtocol { } struct MyStruct: MyProtocol { } let structs = [MyStruct(), MyStruct()] var protocols = [MyProtocol]() protocols = structs // it's ok protocols += structs /

我试图找出这一切发生的原因,但我失败了,有什么不对劲吗

还有其他人遇到过这样的错误吗

我该怎么办,我需要帮助

这是我的代码:

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]