我有一个包含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]
Run Code Online (Sandbox Code Playgroud)
当我减少数组并将其分配给变量时,我只能对数组中的最后一个元素求和.
let total = arr.reduce(0, {$1.distance! + $1.distance!}) //returns 4
Run Code Online (Sandbox Code Playgroud)
如果我尝试$ 0.distance!它的错误是"没有更多的上下文,表达式是模棱两可的".
我试着更明确:
var total = arr.reduce(0, {(first: AClass, second: AClass) -> Int in
return first.distance! + second.distance!
})
Run Code Online (Sandbox Code Playgroud)
但是"'Int'的错误与上下文类型'_'不兼容"如何将其减少到距离的总和?
Sul*_*han 14
var total = arr.reduce(0, {$0 + $1.distance!})
Run Code Online (Sandbox Code Playgroud)
第一个参数是累加器,它已经是一个整数.
请注意,这将在没有距离的元素上崩溃.你可以解决这个问题,例如:
let total = arr.reduce(0, {$0 + ($1.distance ?? 0)})
Run Code Online (Sandbox Code Playgroud)
要么
let total = arr.compactMap { $0.distance }.reduce(0, +)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2727 次 |
| 最近记录: |