Swift   发布时间:2022-03-31  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了数组 – Swift 3无法将符合协议的对象数组附加到该协议的集合中大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

概述

下面我粘贴了你应该能够粘贴到 Swift 3游乐场的代码并查看错误. 我定义了一个协议,并创建一个该类型的空数组.然后我有一个类符合我尝试附加到数组的协议,但我收到以下错误. protocol MyProtocol { var text: String { get } } class MyClass: MyProtocol { var text = "hello" } var c
下面我粘贴了你应该能够粘贴到 Swift 3游乐场的代码并查看错误.

我定义了一个协议,并创建一个该类型的空数组.然后我有一个类符合我尝试附加到数组的协议,但我收到以下错误.

protocol MyProtocol {
    var text: String { get }
}

class MyClass: MyProtocol {
    var text = "Hello"
}
var collection = [MyProtocol]()
var myClassCollection = [MyClass(),MyClass()]
collection.append(myClassCollection)

argument type '[MyClass]' does not conform to expected type 'MyProtocol'

请注意,collection = myClassCollection返回以下错误

error: cAnnot convert value of type '[MyProtocol]' to expected argument type 'inout _'

这在早期版本的Swift中有效.

到目前为止我找到的唯一@L_197_9@案是迭代并将每个元素添加到新数组中,如下所示:

for item in myClassCollection {
    collection.append(item)
}

任何帮助表示感谢,谢谢!

编辑

如下所示的@L_197_9@案是:

collection.append(contentsOf: myClassCollection as [MyProtocol])

当您缺少“as [MyProtocol]”时,真正的问题是误导性的编译器错误

编译器错误如下:

error: extraneous argument label 'contentsOf:' in call
collection.append(contentsOf: myClassCollection)

错误导致用户代码删除contentsOf:然后导致我第一次提到的错误.

解决方法

append(_ newElement:Element)追加单个元素.
你想要的是追加(contentsOf newElements:C).

但是你
将[MyClass]数组显式转换为[MyProtocol]:

collection.append(contentsOf: myClassCollection as [MyProtocol])
// or:
collection += myClassCollection as [MyProtocol]

正如Type conversion when using protocol in Swift中所解释的那样
将每个数组元素包装成一个包含“符合MyProtocol”的框,它不仅仅是一个重新解
数组.

编译器会自动为单个值执行此操作(这就是原因

for item in myClassCollection {
    collection.append(item)
}

编译)但不是数组.在早期的Swift版本中,你你甚至不能用[MyProtocol]来整个阵列不得不施展每一个元素.

大佬总结

以上是大佬教程为你收集整理的数组 – Swift 3无法将符合协议的对象数组附加到该协议的集合中全部内容,希望文章能够帮你解决数组 – Swift 3无法将符合协议的对象数组附加到该协议的集合中所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。