2017-08-02 83 views
2

我有一个项目追加属性降低

struct Item { 
    var id: String 
} 

我如何可以追加所有的IDS使用减少功能的数组的数组?

我尝试:

self.items.reduce([String](), { $0.0.append($0.1.id)}) 

但是编译显示了一个错误:

Contextual closure type '(_, [Item]) -> _' expects 2 arguments, but 1 was used in closure body

回答

1

如果你想这样做与减少,这里是斯威夫特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"] 

有2个问题:

  1. 减少是给你2个参数,不有2个值
  2. 不能编辑传递给你块参数单个元组,你必须返回新对象

但在这种情况下,最好的解决办法是使用地图:

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

试试这个:

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

错误:类型为“[项目]”没有成员“id”值 –

+0

对不起,更新......至于@vadian虽然说,你可能真的想使用'map'。 – paulvs

1

你大概的意思map而不是reduce

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