首页 > 解决方案 > Swift - 方法返回后从firebase实时数据库获取数据

问题描述

下午好。我正在学习在 iOS 上进行开发。以前,我是在 Android 上做的,但现在我不能在这里做。该变量始终返回“”。我知道这些是异步过程,一般来说,这样的函数应该在没有返回参数的情况下完成,但是如何做到这一点我不太清楚。

//在swiftUI中,我只是调用方法

import Foundation
import Firebase
import FirebaseDatabase

class GetGarbageInfo {
    func getInfo(path:String) -> String{
        var result = ""
        
        let rootReference = Database.database().reference()
        let garbageReference = rootReference.child("GarbageInformation").child(path).child("body")
        
        garbageReference.observeSingleEvent(of: .value) { (DataSnapshot) in
            result = DataSnapshot.value as? String ?? "0"
        }
        return result
    }
}

标签: swiftfirebase-realtime-database

解决方案


您需要使用 acompletion handler而不是return(正如您自己已经注意到的那样):

class GetGarbageInfo {

    // add completion, remove return type
    func getInfo(path: String, completion: @escaping (String) -> Void) {
        var result = ""
        
        let rootReference = Database.database().reference()
        let garbageReference = rootReference.child("GarbageInformation").child(path).child("body")
        
        garbageReference.observeSingleEvent(of: .value) { (DataSnapshot) in
            result = DataSnapshot.value as? String ?? "0"
        }

        // return the result in the completion
        completion(result)
    }
}

推荐阅读