Swift 3 - 通过Int属性减少对象集合

时间:2017-06-04 20:24:34

标签: swift reduce

我有一个包含3个对象的数组,如下所示:

class AClass {
    var distance: Int?
}

let obj0 = AClass()
obj0.distance = 0

let obj1 = AClass()
obj1.distance = 1

let obj2 = AClass()
obj2.distance = 2

let arr = [obj0, obj1, obj2]

当我减少数组并将其赋值给变量时,我只能对数组中的最后一个元素求和。

let total = arr.reduce(0, {$1.distance! + $1.distance!})  //returns 4

如果我尝试$ 0.distance!如果没有更多的上下文,那么"表达式的错误是不明确的。

我试着更明确:

var total = arr.reduce(0, {(first: AClass, second: AClass) -> Int in
    return first.distance! + second.distance!
})

但这种错误与"' Int'与上下文类型不兼容' _'" 如何将其减少到距离的总和?

1 个答案:

答案 0 :(得分:13)

var total = arr.reduce(0, {$0 + $1.distance!})

第一个参数是累加器,它已经是一个整数。

请注意,这会在没有距离的元素上崩溃。你可以解决这个问题。使用:

let total = arr.reduce(0, {$0 + ($1.distance ?? 0)})

let total = arr.compactMap { $0.distance }.reduce(0, +)