我有对象列表,T
我想计算它们的总和(T
对象)
var objects: Observable<List<T>>
T
对象有一个返回Int
值的方法。获取每个对象并准备值数组(flatMap
函数)的主要思想。下一步将是reduce
func 与Int
值。
let sum = values.reduce(0) { $0 + $1 }
问:如何获得每个T
对象?
我有对象列表,T
我想计算它们的总和(T
对象)
var objects: Observable<List<T>>
T
对象有一个返回Int
值的方法。获取每个对象并准备值数组(flatMap
函数)的主要思想。下一步将是reduce
func 与Int
值。
let sum = values.reduce(0) { $0 + $1 }
问:如何获得每个T
对象?
看看下面的解决方案,它试图展示你正在尝试做什么,你可能需要一个具有 int 属性的类型 T 的协议,如下例所示。你可以在操场上试试。
protocol Countable {
var value: Int { get }
init(value: Int)
}
class User: Countable {
var value: Int = 0
required convenience init(value: Int) {
self.init()
self.value = value
}
}
class UserGroup<T: Countable> {
func calculateTotal() {
let users: [T] = [T(value: 2), T(value: 21)]
let total = users.flatMap { ($0 as Countable).value }.reduce(0) { $0 + $1 }
print("total", total)
}
}
let userGroup = UserGroup<User>()
userGroup.calculateTotal()