let arrayOfDwarfArrays = [["Sleepy", "Grumpy", "Doc"], ["Thorin", "Nori"]]
var dwarfArray: [String] = []
for dwarfName in arrayOfDwarfArrays {
dwarfArray.append(dwarfName)
}
我想做的就是访问原始数组数组的值并将它们附加到一个新的单个数组中。但我不断收到此错误:
无法将“[String]”类型的值转换为预期的参数类型“String”
用最简单的话来说,我做错了什么?
最佳答案
Array.append(_:)
需要一个 Element
类型的参数,它只是一个元素。显然,只有当 Element
为 [String]
(即数组具有类型)时,提供 [String]
作为此参数的参数才有效[[字符串]]
。由于情况并非如此,Array.append(_:)
不是正确的选择。
相反,您应该使用 Array.append(contentsOf:)
,它需要一个 S
类型的参数,其中 S
是任何符合 Sequence
的类型,其 Element
与数组的元素。这适用于当您想要追加子数组 (dwarfName) 的所有元素时。
let arrayOfDwarfArrays = [["Sleepy", "Grumpy", "Doc"], ["Thorin", "Nori"]]
var dwarfArray: [String] = []
for dwarfName in arrayOfDwarfArrays {
dwarfArray.append(contentsOf: dwarfName)
}
但在这种特殊情况下,使用简单的 Array.flatMap(_:)
可以更好地表达此代码。操作:
let arrayOfDwarfArrays = [["Sleepy", "Grumpy", "Doc"], ["Thorin", "Nori"]]
let dwarfArray = arrayOfDwarfArrays.flatMap { $0 }
关于arrays - 在 Swift 中访问数组数组中的项目时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54660828/