【问题标题】:Swift 4 function returning 0 for multiple return valuesSwift 4 函数为多个返回值返回 0
【发布时间】:2018-04-28 03:53:24
【问题描述】:

我一直在四处寻找,但找不到解决方案。有人可以让我知道我做错了什么。 这是我的函数代码:在我的数据库中,我有 hour=5 作为 Int 和 Minute=45 作为 Int 但是当我打印时,函数的值会打印 0,0

var docRefF : DocumentReference!

func getTime()-> (Int, Int){
    var FHour = Int()
    var FMinute = Int()

    docRefF = Firestore.firestore().document("sampleTime/worktime")
    dataListener =  docRefF.addSnapshotListener { (docSnapshot, error) in
        guard let docSnapshot = docSnapshot, docSnapshot.exists else { return }

        let data = docSnapshot.data()
        let Hour:Int = data["Hour"]! as! Int
        let Minute: Int = data["Minute"]! as! Int

        FHour = Hour
        FMinute = Minute
    }

    return (FHour, FMinute)
}
let time = getTime()
print("\(time.0),\(time.1)" )
 //printed 0,0

【问题讨论】:

  • 对“异步”一词进行一些研究,并阅读 Firestore/Firebase 快照侦听器和完成处理程序的文档。

标签: swift google-cloud-firestore


【解决方案1】:

显然它的异步执行问题。使用带有 Closure* 的 * 函数 而不是带有返回值的函数。

请参考以下代码

var docRefF : DocumentReference!
func getTime(_ then:(_ first:Int, _ second:Int)->()){
    var FHour = Int()
    var FMinute = Int()


    docRefF = Firestore.firestore().document("sampleTime/worktime")
    dataListener =  docRefF.addSnapshotListener { (docSnapshot, error) in
     guard let docSnapshot = docSnapshot, docSnapshot.exists else { return }
   let data = docSnapshot.data()
    let Hour:Int = data["Hour"]! as! Int
    let Minute: Int = data["Minute"]! as! Int

        FHour = Hour
        FMinute = Minute

    //TODO:- Use other firebase related task same as your code, so that uncomment other lines same as your origional

    then(FHour, FMinute) // This is closure call back line

     }
   }

   //Calling your function
    getTime { (first, second) in

    print(first,second)

    }

【讨论】:

    猜你喜欢
    • 2021-12-30
    • 1970-01-01
    • 2020-12-17
    • 2019-06-02
    • 1970-01-01
    • 2016-06-05
    • 1970-01-01
    • 1970-01-01
    • 2020-12-06
    相关资源
    最近更新 更多