Swift 使用reduce将struct的属性追加到数组

Swift 使用reduce将struct的属性追加到数组,swift,Swift,我有一系列的物品 struct Item { var id: String } 如何使用reduce函数将所有ID追加到一个数组中 我尝试的是: self.items.reduce([String](), { $0.0.append($0.1.id)}) 但编译器显示了一个错误: 上下文闭包类型“([Item])->”需要2个参数,但闭包正文中使用了1个参数 试试这个: items.reduce([String](), { res, item in var arr = res

我有一系列的物品

struct Item {
    var id: String
}
如何使用reduce函数将所有ID追加到一个数组中

我尝试的是:

self.items.reduce([String](), { $0.0.append($0.1.id)})
但编译器显示了一个错误:

上下文闭包类型“([Item])->”需要2个参数,但闭包正文中使用了1个参数

试试这个:

items.reduce([String](), { res, item in
    var arr = res
    arr.append(item.id)
    return arr
})

你的意思可能是
map
而不是
reduce

let ids = items.map{ $0.id }

如果您想使用reduce,下面是Swift 3和4的一个片段:

struct Item {
    var id: String
}

var items = [Item(id: "text1"), Item(id: "text2")]
let reduceResult = items.reduce([String](), { $0 + [$1.id] } )
reduceResult // ["text1", "text2"]
有两个问题:

  • Reduce为您提供了2个参数,而不是具有2个值的单个元组
  • 不能编辑块中传递给您的参数,必须返回新对象
  • 但在这种情况下,最好的解决方案是使用map:

    let reduceResult = items.map { $0.id }
    

    错误:“[Item]”类型的值没有成员“id”。抱歉,已更新。。。正如@vadian所说,您可能真的想使用
    map