доступ к переменной внутри замыкания из другой функции с помощью swift - PullRequest
0 голосов
/ 28 сентября 2018

Я пытаюсь создать приложение, в котором перечислены определенные службы, где пользователи могут оценивать каждую из них.Оценка с каждого сервера сохраняется в базе данных Firebase.Я могу получить все оценки и вычислить средние значения, используя следующую функцию:

func observeStars() {

    let placesRef = Database.database().reference().child("Review")

    placesRef.observe(.childAdded, with: { (snapshot) in
let toId = snapshot.key
       var total: Double = 0.0
        var average: Double = 0.0
        placesRef.child(toId).observeSingleEvent(of: .value, with: { (snapshot) in

       let count = snapshot.childrenCount

        for childOfPlace in snapshot.children {

            let childOfPlaceSnap = childOfPlace as! DataSnapshot

            let dict = childOfPlaceSnap.value as! [String: Any]
            let val = dict["STAR"] as! Double

            total += val

            }
             average = total/Double(count)
           print(average)


        })

    }, withCancel: nil)

}

Как вы можете видеть, среднее значение печатается в течение 2 последовательных замыканий внутри функции.Однако у меня возникли проблемы с использованием этих средних значений в другой функции в отдельном файле swift, поэтому я могу использовать его для отображения средних оценок в каждой таблице ViewViewcell, представляющей каждый сервис.Мой большой вопрос заключается в том, как вывести вычисленное среднее значение за пределы функции наблюдающей звезды () и использовать его где-нибудь еще?Любой вклад будет очень признателен!

1 Ответ

0 голосов
/ 28 сентября 2018
var average: Double = 0.0

func observeStars() {

let placesRef = Database.database().reference().child("Review")

placesRef.observe(.childAdded, with: { (snapshot) in
    let toId = snapshot.key
    var total: Double = 0.0

    placesRef.child(toId).observeSingleEvent(of: .value, with: { (snapshot) in

    let count = snapshot.childrenCount

    for childOfPlace in snapshot.children {

        let childOfPlaceSnap = childOfPlace as! DataSnapshot

        let dict = childOfPlaceSnap.value as! [String: Any]
        let val = dict["STAR"] as! Double

        total += val

        }
       self.average = total/Double(count)
       print(average)


    })

}, withCancel: nil)

}
...