gpt4 book ai didi

swift - Firebase 在 swift 中创建具有可选值的模型

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

我想创建具有可选值的模型。我实现了 flatmap 来实现这一点。节点看起来像这样,而 imageUrl 并不像这样每次都存在。

"Post": {
"uid": {
   "autoid"{
"Text": "some text",
"Date": "some date",
"imageUrl": {
autoID1: url1,
autoID2: url2
}
},
"autoid"{
"Text": "some text",
"Date": "some date"
}
}
}

我在这里创建了一个模型

import UIKit
import Firebase

extension DataSnapshot {
var snapshots: [DataSnapshot] {
return children.allObjects.flatMap({ $0 as? DataSnapshot })
}
var string: String? { return value as? String }
var url: URL? { return string.flatMap({ URL(string: $0) }) }
var urls: [URL] { return snapshots.flatMap({ $0.url }) }
}

struct Post {

let snapshot: DataSnapshot?

var Date: String!
var imageUrl: [URL]?
var Text: String!

init(snapshot: DataSnapshot) {

self.snapshot = snapshot
self.Date = snapshot.child["Date"].string
self.imageUrl = snapshot.child["imageUrl"].urls
self.Text = snapshot.child["Text"].string
}
}

但在 init 中,错误提示为

Value of type 'DataSnapshot' has no member 'child'

有人知道怎么解决吗?这也是创建功能的正确方法,例如带有多个图像的 Twitter 帖子,有时没有图像,只显示文本。

最佳答案

DataSnapshot 没有成员 child,文档 here .所以为了能够从 DataSnapshot 中提取一些东西,您可以使用这个想法:

if let value = snapshot.value as? [String: Any] {
self.Date = value["Date"] as? String ?? ""
self.Text = value.child["Text"] as? String ?? ""

// extracting the urls
if let urls = value.child["tweetImageUrl"] as? [String:String] {
self.imageUrl = urls.flatMap { k,v in URL(string:v) }
}
}

请注意:flatMap 很棒,因为它提供了自动跳过所有返回可选值的迭代的可能性。

关于swift - Firebase 在 swift 中创建具有可选值的模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47882613/

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