我正在寻找一种方法来获得数组中包含的类的值的总和。我的设置如下:
class CustomClass {
var value: Int?
init(value: Int) {
self.value = value
}
}
let object1 = CustomClass(value: 2)
let object2 = CustomClass(value: 4)
let object3 = CustomClass(value: 8)
let array: [CustomClass] = [object1, object2, object3]
我目前的解决方案如下:
var sumArray = [Int]()
for object in array {
sumArray.append(object.value!)
}
let sum = sumArray.reduce(0, +)
问题是,如果类有很多其他的值,它会变得非常复杂,有没有人知道更好的解决方案?
4条答案
按热度按时间s3fp2yjn1#
你可以把你定制类数组压缩Map成整数数组,然后把数组的值减少到它的和。比如,
zi8p0yeb2#
您可以在
array
上使用单个reduce
。rdrgkggo3#
我会为你的类或结构创建一个包含值的协议,并将它的声明改为非可选的。
然后,您需要使您的类符合该协议:
现在,您可以使用只读示例属性来扩展收集协议,以返回数组中所有元素的总和。
一个二个一个一个
另一种选择是扩展序列并添加generic sum method,该generic sum method接受其属性符合
AdditiveArithmetic
的密钥路径或者向符合AdditiveArithmetic的协议添加关联类型:
用法:
w1e3prcc4#
捷径:
let sum = customArray.reduce(0) { $0 + $1.intValue }