我试图从 Firebase
中获取一堆整数值,将它们存储到一个数组中,然后添加所有元素。
我试过用
let sum:Int = challengeList.reduce(0, +)
获取名为 challengeList 的数组中元素的总和,但我收到的错误是“对成员 '+' 的不明确引用”
func LoadPointsCompleted() {
self.challengeList.removeAll()
databaseReference = Database.database().reference()
let userID = Auth.auth().currentUser?.uid
let refChallenges = Database.database().reference(withPath: "Challenges").child(userID!).queryOrdered(byChild: "Status").queryEqual(toValue: "Complete")
refChallenges.observeSingleEvent(of: .value, with: { (snapshot) in
//if the reference have some values
if snapshot.childrenCount > 0 {
//clearing the list
self.challengeList.removeAll()
//iterating through all the values
for Challenges in snapshot.children.allObjects as! [DataSnapshot] {
//getting values
let challengeObject = Challenges.value as? [String: AnyObject]
let Points = challengeObject?["Points"] as! Int
//creating challenge object with model and fetched values
let challenge = pointsModel(Points: Points as Int?)
//appending it to list
self.challengeList.append(challenge)
let sum:Int = challengeList.reduce(0, +)
}
}
}
)}
//同样使用下面的模型
import Foundation
class pointsModel {
var Points: Int?
init(Points: Int?){
self.Points = Points
}
}
我无法编译...
最佳答案
由于 points
始终是 Int
,因此无需将其设为可选。您也可以使用 struct
,这样就无需创建自己的初始化程序,您可以免费获得它
struct PointsModel {
var points: Int
}
...注意类型以大写字母开头,常量、变量、方法以小写字母开头
然后你可以通过添加 points
属性来编译它,而不是整个模型
challengeList.reduce(0) {$0 + $1.points}
关于ios - 试图从 Firebase 捕获整数数据到数组中,然后对所有元素求和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54018330/