尝试将数组附加到 Swift 中的其他数组时获取“无关参数标签”

Posted

技术标签:

【中文标题】尝试将数组附加到 Swift 中的其他数组时获取“无关参数标签”【英文标题】:Getting "extraneous argument label" when trying to append array to other array in Swift 【发布时间】:2017-09-14 23:20:42 【问题描述】:

尝试在 Playground 中运行此代码时出现 extraneous argument label 'contentsOf:' in call array.append(contentsOf: test) 错误:

import Cocoa

var array:[Any] = []
let test = [""]
array.append(contentsOf: [""])
array.append(contentsOf: test)

为什么会这样?据我了解,有两个相等的空字符串数组。

【问题讨论】:

只需将测试声明为let test:[Any] = [""],它就会停止抱怨。另一种选择是更改数组类型var array:[String] = [] 比较***.com/q/41096163/2976878 test(类型为[String])必须先转换为[Any],然后才能附加。此过程要求将每个组成部分String 装箱到协议见证表中。由于它是一个O(n) 操作,因此编译器最好不要在不通知您这种转换正在发生的情况下静默执行此操作。 检查数组中是否有任何拼写错误或混淆的不区分大小写的变量 【参考方案1】:

要在 cmets 中回答您的具体问题,在这种情况下,您只需进行转换,以便 Swift 知道您知道。在这种情况下,由于 SKShapeNode 向下转换为 SKNode 就好了,您可以使用 as 进行转换。如果您正在执行可能会失败的演员表,您需要使用 as? 并安全地打开以确保。

var allNodes: [SKNode] = []
let onlyShapeNodes: [SKShapeNode] = []

allNodes.append(contentsOf: onlyShapeNodes as [SKNode])

对于原始的通用示例,这也可以。

var array: [Any] = []
let test = ["", ""]

array.append(contentsOf: [""] as [Any])
array.append(contentsOf: test as [Any])

【讨论】:

谢谢。我明白。我错误地认为,由于 SKShapeNode 是从 SKNode 继承的,因此我可以轻松地将 SKShapeNodes 数组添加到 SKNodes 数组中,而无需使用任何“as”。特别是我很困惑,我仍然可以写类似array.append (SKShapeNode ()) 的东西,其中array[SKNode]- 并添加一个没有错误的SKShapeNode 是的,在某些情况下,编译器可以推断出您正在尝试执行的操作,例如 array.append(SKShapeNode()),而在其他情况下则无法推断,因为类型是显式的。数字也经常发生这种情况。 1 + 5.0 有效,但如果你将它们放入变量中并做了valueInt + valueDouble 它会生气。因为类型是在那个时候保存的。 总之,这很奇怪。看看我原来的问题代码。现在我不明白其他事情。如果我们需要将test 转换为[Any],为什么我们不需要像这样将[""] 转换为Anyarray.append(contentsOf: [""] as [Any])?我看到它在你的答案中。但在第一种情况下,没有as [Any] 一切正常 换句话说:追加test - 错误。附加test as [Any] - 好的。但是追加[""] - 好的,追加[""] as [Any] 也可以... 因为类似于把SKShapeNode()直接放进去,如果直接传入就可以推断出[""]的类型。

以上是关于尝试将数组附加到 Swift 中的其他数组时获取“无关参数标签”的主要内容,如果未能解决你的问题,请参考以下文章

在 Swift 中将模型附加到数组中

在swift 3中避免数组中的重复

在展开可选值时发现 nil,附加到数组,Swift 3

你能用 swift 将字符串附加到 Firebase 数组吗

将 FMDB SQLite 结果附加到 Swift 数组

Swift & Firestore - 使用 .arrayUnion() 将字典附加到嵌套数组