arrays - 在 Swift 中访问数组数组中的项目时遇到问题

标签 arrays swift

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/

相关文章:

swift - 苹果操作系统 : Any way to hide window title and not toolbar item labels?

ios - textView Swift 的动态单元格高度

javascript - 添加和显示数组问题

PHP循环遍历数组并附加到对象

javascript - 比较两个数组 Javascript - 关联

ios - 如何使用 Alamofire multipart 在参数中发送数组

ios - fatal error ..从另一个类访问变量时

ios - 像 YouTube 应用一样处理视频播放器的方向变化

android - 使用 JsonArray 自定义布局

java - 将数组中的整数拆分为单个数字