ios - 使用 Swift 初始化一个对象以在 Firebase 上获取可选值

标签 ios swift firebase firebase-realtime-database initializer

一般来说,我对初始化对象很满意,但我的方法似乎只有在所有参数必须存在于数据库中时才有效。我看过this这有效。但我现在不知道如何用嵌套数组初始化它。

这就是我通常初始化对象的方式:

class User {

    var firstName: String
    var lastName: String
    var summary: String?
    var groups = [Group]()
    var ref: DatabaseReference?
    var key: String

    init?(from snapshot: DataSnapshot) {

        let snapshotValue = snapshot.value as? [String: Any]

        guard let firstName = snapshotValue?["firstName"] as? String, let lastName = snapshotValue?["lastName"] as? String, let summary = snapshotValue?["summary"] as? String else { return nil }

        self.firstName = firstName
        self.lastName = lastName
        self.summary = summary
        self.key = snapshot.key

        self.groups(snapshot: snapshot.childSnapshot(forPath: "groups"))

    }

    func groups(snapshot: DataSnapshot) {
        for child in snapshot.children {
            guard let group = child as? DataSnapshot else { continue }
        }
    }

最佳答案

只是不要将可选属性作为该防护的一部分(这会阻止执行完成:

init?(from snapshot: DataSnapshot) {

    let snapshotValue = snapshot.value as? [String: Any]

    guard let firstName = snapshotValue?["firstName"] as? String,
          let lastName = snapshotValue?["lastName"] as? String else { return nil }

    self.firstName = firstName
    self.summary = snapshotValue?["summary"] as? String
    self.key = snapshot.key

    self.groups(snapshot: snapshot.childSnapshot(forPath: "groups"))

}

您也可以使用 if let 语法:

if let summary = snapshotValue?["summary"] as? String {
    self.summary = summary
}

但在这种情况下,这更简单:

self.summary = snapshotValue?["summary"] as? String

关于ios - 使用 Swift 初始化一个对象以在 Firebase 上获取可选值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48403436/

相关文章:

objective-c - 移动 MKOverlayPathView 消失在瓷砖后面

iphone - 如何正确释放 AVCaptureSession

ios - Firebase google登录身份验证AppDelegate-使用未解析的标识符 'isMFAEnabled'

ios - “SDWebImageCompat.h”文件未找到错误

java - Firebase 上传监听器永远不会被解雇

ios - Facebook SDK 3.1 - com.facebook.sdk 使用 [facebook 授权 :permissions] 进行身份验证时出现错误 5

iOS 在导航堆栈中的 View Controller 之间循环

ios - 可选<String>到Int64为零,硬编码它可以工作

java - 如何在 Firebase 中删除其他用户数据

Firebase 云功能管理员