Попытка собрать целочисленные данные из Firebase в массив, а затем суммировать все элементы - PullRequest
0 голосов
/ 03 января 2019

Я пытаюсь получить кучу целочисленных значений из 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
    }
}

Я не могу заставить это скомпилировать ...

1 Ответ

0 голосов
/ 03 января 2019

Поскольку points всегда Int, нет необходимости делать его необязательным.Также вы можете использовать struct, и тогда нет необходимости создавать собственный инициализатор, вы получаете его бесплатно

struct PointsModel {
    var points: Int
}

... обратите внимание, что types начинается с большой заглавной буквы и константы, переменные, методы с маленькой заглавной буквой


Затем вы можете скомпилировать ее, добавив points свойство к сумме, а не всю модель

challengeList.reduce(0) {$0 + $1.points}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...