0

我有对象列表,T我想计算它们的总和(T对象)

var objects: Observable<List<T>>

T对象有一个返回Int值的方法。获取每个对象并准备值数组(flatMap函数)的主要思想。下一步将是reducefunc 与Int值。

let sum = values.reduce(0) { $0 + $1 }

问:如何获得每个T对象?

4

1 回答 1

0

看看下面的解决方案,它试图展示你正在尝试做什么,你可能需要一个具有 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()
于 2017-08-22T13:39:00.933 回答