Arrays 在Swift中访问数组中的项时出现问题
我所要做的就是访问原始数组的值,并将它们附加到新的单个数组中。但我一直在犯这样的错误: 无法将“[String]”类型的值转换为预期的参数类型“String”Arrays 在Swift中访问数组中的项时出现问题,arrays,swift,Arrays,Swift,我所要做的就是访问原始数组的值,并将它们附加到新的单个数组中。但我一直在犯这样的错误: 无法将“[String]”类型的值转换为预期的参数类型“String” 用最简单的术语来说,我做错了什么?这是因为dwarfArray是一个字符串数组,需要追加一个字符串。然而,它得到的是一个字符串数组,而不仅仅是字符串 像这样试试 let arrayOfDwarfArrays = [["Sleepy", "Grumpy", "Doc"], ["Thorin", "Nori"]] var dwarfArra
用最简单的术语来说,我做错了什么?这是因为
dwarfArray
是一个字符串数组,需要追加一个字符串。然而,它得到的是一个字符串数组,而不仅仅是字符串
像这样试试
let arrayOfDwarfArrays = [["Sleepy", "Grumpy", "Doc"], ["Thorin", "Nori"]]
var dwarfArray: [String] = []
for dwarfName in arrayOfDwarfArrays {
dwarfArray.append(dwarfName)
}
需要类型为Element
的参数,该参数仅为单个元素。显然,仅当元素
为[String]
时,提供[String]
作为此参数的参数才有效,即,如果数组的类型为[[String]]
。由于情况并非如此,Array.append(:)
不是正确的选择
相反,您应该使用,它需要类型为S
的参数,其中S
是其元素
与数组元素相同的任何序列
一致类型。这适用于要附加子阵列(dwarfName)的所有元素的情况
但在这种特殊情况下,使用简单的操作可以更好地表达此代码:
let arrayOfDwarfArrays = [["Sleepy", "Grumpy", "Doc"], ["Thorin", "Nori"]]
var dwarfArray: [String] = []
for dwarfName in arrayOfDwarfArrays {
dwarfArray.append(contentsOf: dwarfName)
}
不需要重新发明轮子。您可以使用名为
joined()
的序列。它将返回一个集合
,如果需要,您可以使用该集合初始化新数组:
let arrayOfDwarfArrays = [["Sleepy", "Grumpy", "Doc"], ["Thorin", "Nori"]]
let dwarfArray = arrayOfDwarfArrays.flatMap { $0 }
如果需要创建新数组,只需使用展平集合的元素对其进行初始化:
let dwarfCollections = [["Sleepy", "Grumpy", "Doc"], ["Thorin", "Nori"]]
// Use 'joined()' to access each element of each collection:
for dwarf in dwarfCollections.joined() {
print(dwarf)
}
这会打印出来
困倦的
暴躁的
医生
索林
诺丽
[“困倦”、“暴躁”、“医生”、“托林”、“诺丽”]
技术上正确,但只使用
append(contentsOf:)
要好得多。首先,它只执行调整大小操作,而此代码可以执行任意数量的调整大小操作。
let dwarfCollections = [["Sleepy", "Grumpy", "Doc"], ["Thorin", "Nori"]]
// Use 'joined()' to access each element of each collection:
for dwarf in dwarfCollections.joined() {
print(dwarf)
}
let dwarfs = Array(dwarfCollections.joined()) // ["Sleepy", "Grumpy", "Doc", "Thorin", "Nori"]
print(dwarfs)