大佬教程收集整理的这篇文章主要介绍了为什么将带有子类型 B 的某些元素的 A 类型数组发送到 Firestore 强制全部发送到 A?,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
注意:这个问题的环境是在 Swift 和 Xcode 12.5 中。我无法确认这种情况是否发生在此环境之外。
考虑类 A
和子类 B: A
,其中 B
有一些 A
没有的属性。
class A {
var a
// ...
}
class B: A {
var b
// ...
}
假设我有一个 A
数组,其中包含一些 B
类型的元素。
var array: [A] = [A(),B(),A()]
我把这个数组放在一个可以发送到 Firestore 的对象中:
class Model: Codable {
var x: [A]
}
我将此数组发送到文档下的 Firestore,使用 x
中的值填充 array
:
someReference.setData(from: Model(x: array))
但是,在 Firestore 控制台中,数据都是 A
类型,并且属性 b
不存在于数据库中的任何位置。
这是有意的行为吗?为什么会出现这种情况?或者,我在构建/发送这些数据时做错了什么?
您可以通过将每个对象单独上传到 Firestore 来实现,如果需要,可以先向下转换对象:
class A: Codable {
var a: String?
private enum CodingKeys : String,CodingKey {
case a = "a"
}
func encode(to encoder: Encoder) throws {
var container = encoder.container(keyedBy: CodingKeys.self)
try container.encode(a,forKey: .a)
}
}
class B: A {
var b: String?
}
var array: [A] = [A(),A(),B()]
for item in array {
if item is B {
let downcast_item = item as! B
someReference.setData(from: downcast_item)
} else if item is A {
someReference.setData(from: item)
}
}
以上是大佬教程为你收集整理的为什么将带有子类型 B 的某些元素的 A 类型数组发送到 Firestore 强制全部发送到 A?全部内容,希望文章能够帮你解决为什么将带有子类型 B 的某些元素的 A 类型数组发送到 Firestore 强制全部发送到 A?所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。