gpt4 book ai didi

ios - 使用 Swift 初始化对象以在 Firebase 上接收可选值

转载 作者:行者123 更新时间:2023-11-28 06:05:20 25 4
gpt4 key购买 nike

一般来说,我对初始化对象很满意,但我的方法似乎只在所有参数都必须存在于数据库中时才有效。我看过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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com