Firebase创建的模型在swift中具有可选值
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Firebase创建的模型在swift中具有可选值相关的知识,希望对你有一定的参考价值。
我想创建具有可选值的模型。我实现了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
内部,错误说
“DataSnapshot”类型的值没有成员“child”
有谁知道如何解决这个问题?这也是创建具有多个图像的twitter帖子等功能的正确方法,有时图像不是,只显示文本。
答案
DataSnapshot
没有成员child
,doc 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
非常棒,因为它提供了自动跳过返回可选值的所有迭代的可能性。
以上是关于Firebase创建的模型在swift中具有可选值的主要内容,如果未能解决你的问题,请参考以下文章