【问题标题】:Swift Firestore cannot get data to ObjectSwift Firestore 无法将数据获取到对象
【发布时间】:2019-03-04 20:33:06
【问题描述】:

您好,我尝试将字符串数组解析为 dao。为此,我创建了这个:

   func getUsersAbos(){
let userid = Auth.auth().currentUser?.uid
let docRef = db.collection("Users").document(userid!)

docRef.getDocument { (document, error) in
if let city = document.flatMap({
$0.data().flatMap({ (data) in
    return UserBlogObject(channelAbos: data)
})
}) {
print("City: \(city)")
} else {
print("Document does not exist")
}
}
}

这是我的道:

导入基础 类用户博客对象{ var channelAbos = 任意

init(channelAbos: [String]) {
    self.channelAbos = channelAbos


}

init(){

}

}

我在这一行得到一个错误:

        return UserBlogObject(channelAbos: data)

无法将类型“[String : Any]”的值转换为预期的参数类型“[String]”

请注意,我只想下载文档中的一个数组,而不是整个文档。

【问题讨论】:

  • 首先请编辑您的问题并更正缩进和代码格式。当代码易于阅读时,它使人们更容易提供好的答案。为了回答您的问题,Firestore 给出了 [String : Any]Dictionary,其中字符串是值的键,而 Any 是值本身。因此,在您的 init 方法中处理字典而不是 [String] 的数组
  • 谢谢,但我只想在我的文档中获取关键 channelAbos 的数组
  • 然后可以使用 ["key"] 获取数组。我会发布一个快速的答案。希望对你有帮助

标签: swift google-cloud-firestore


【解决方案1】:

你可以做这样的事情。我认为没有必要使用flatMap() 使函数过于复杂,但如果你愿意,你可以这样做。这是一个如何创建方法的代码示例。

func getUsersAbos() {
    guard let userID = Auth.auth().currentUser?.uid else { return }
    let docRef = db.collection("Users").document(userID)
    docRef.getDocument { (document, error) in
        if error != nil { return }
        guard let data = document?.data() else { return }
        guard let channelAbos = data["channelAbos"] as? [String] else { return }
        let userBlogObject = UserBlogObject.init(channelAbos: channelAbos) // This is the created object. Handle it.
    }
}

还有你的班级:

class UserBlogObject {
    var channelAbos : [String]

    init(channelAbos: [String]) {
        self.channelAbos = channelAbos
    }
}

【讨论】:

    猜你喜欢
    • 2021-10-12
    • 2018-10-14
    • 1970-01-01
    • 2019-10-15
    • 1970-01-01
    • 2021-12-15
    • 1970-01-01
    • 1970-01-01
    • 2022-01-22
    相关资源
    最近更新 更多