swift - 嵌套 Bool 总是返回 Nil

标签 swift firebase firebase-realtime-database

我在使用此 Swift 函数时遇到问题,虽然我确信解决方案相当简单,但我无法弄清楚哪里出了问题。这是代码:

static func isArtist(user:FIRUser) -> Bool? {
    var artist: Bool?
    database.child("users").child(user.uid).observeSingleEventOfType(.Value, withBlock: { (snapshot) in
        artist = true //retrieves bool, simplified for example
    }) { (error) in
        print("isArtist - data could not be retrieved - EXCEPTION: " + error.localizedDescription)
    }
    return artist
}

该函数每次都返回 nil,而逻辑上我认为它会返回 true。这是嵌套函数的问题吗?如何在嵌套函数中返回内容?数据库是 Swift Firebase SDK 的实现,如果无法检索到此类对象(对于本例,如果 artist 为 nil),该函数应该只返回 nil。谢谢。

最佳答案

使用 completionBlock: 来处理你的情况,这将返回一个 nil 的原因是因为你已经声明了你的 artist变量为 optional ,它需要一些时间从任何后端(异步调用)检索数据,因此甚至在您可以从数据库检索一些值之前执行 return artist :-

使用:-

static func isArtist(user:FIRUser, completionBlock : ((isArtistBool : Bool)-> Void)) {
    database.child("users").child(user.uid).observeSingleEventOfType(.Value, withBlock: { (snapshot) in
             completionBlock(isArtistBool : true) //returns Bool in completionHnadler

        }) { (error) in

           print("isArtist - data could not be retrieved - EXCEPTION: " + error.localizedDescription)
          }

}

当您调用函数 isArtist 时:-

isArtist(FIRAuth.auth()!.currentUser, completionBlock : {(isArtistBool) in 
 //Will return `isArtistBool` in completionHandler
 ..//rest of the code
})

关于swift - 嵌套 Bool 总是返回 Nil,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38985066/

相关文章:

node.js - 如何了解Firebase云函数中的新数据?

java - Firebase 在应用启动时检索所有数据

javascript - Firebase 错误 : Uncaught TypeError: ref. once is not a function

ios - NSURLConnection中建立错误案例,Swift中JSON解析

ios - 如何将按钮添加到 TableView 部分的页脚?

ios - 处理 UITableViewcell subview 的 Action (事件)的正确方法是什么?

ios - 从 firebase 中删除注释数据

firebase - 如何覆盖 firebase 云消息传递中的 onMessage 方法?

javascript - 使用 Firebase API 登录时出现超时错误

ios - 为什么我的线不旋转? -- CGContextRotateCTM