gpt4 book ai didi

swift - 将快照解析为模型 - FirebaseUI

转载 作者:搜寻专家 更新时间:2023-10-31 22:14:27 28 4
gpt4 key购买 nike

我目前正从 Android 开发转向使用 Firebase 的 Swift 开发。

在 Android 中,很容易将 Firebase 检索到的快照解析为对象(例如 dataSnapshot.getvalue(EventModel.class))

我们如何在 Swift 中实现相同的目标?好像没有这个功能。我正在使用 Firebase-ui 检索列表的对象,有一个参数“modelClass”,但没有关于如何定义该类的信息。

我们如何定义以下对象:

  • 事件模型:

    • 名称:字符串
    • 描述:字符串
    • 消息:消息模型
  • 消息模型:

    • 作者:字符串
    • 内容:字符串

有没有办法轻松定义它并在 Swift 中解析快照?或者我们必须使用像 ObjectWrapper 这样的自定义函数/类吗?

亲切的问候,

亨利

最佳答案

这里是 FirebaseUI 的作者,好问题!

简短的回答是,Firebase 的 Objective-C 客户端对于 Android/Java snapshot.getValue(Object.class) 没有类似的功能。这是由于多种原因造成的,但本质上 Java 有一些 Objective-C 没有的东西(在这种情况下类型注释和泛型是两个相关的东西)阻止我们在客户端轻松地做到这一点。通常,人们最终会构建/使用 JSON <--> 对象映射器(我假设 ObjectWrapper 是),因为 Objective-C 不提供这种开箱即用的功能。

更长的答案是,通过使用 Objective-C 运行时并使用反射将接收到的字典转换为模型对象,某种程度上可以做到这一点。我破解了一个在 FirebaseUI 中半未记录的 modelClass 实现,因为它只在有限的情况下工作。请参阅下面我在文档中的快速传递:)

当前功能只是创建类的一个实例,然后直接从 snapshot.value 提供的字典中填充字段(参见实现 here )。这意味着属性必须与 Firebase 中的键完全匹配。 这也意味着它需要从 Firebase 接收一个字典——它不会自动转换字符串、数字、 bool 值或数组。这也意味着嵌套对象不太可能工作,因为Objective-C 没有泛型(至少主流的 Obj-C 还没有)。具体来说,我们目前仅支持具有原始类型值的单级 Javascript 对象。

如果您在 Firebase 中有一个 JSON 对象,例如:

{
message: {
name: String,
text: String
}
}

您的 Objective-C(或 Swift)类看起来像:

// Obj-C
@interface MyMessageClass : NSObject

@property (nonatomic) NSString *name;
@property (nonatomic) NSString *text;

@end

// Swift
class MyMessageClass {

let name: String!
let text: String!

}

然后您可以使用 modelClass:(Class)class 属性在构造函数中传入 [MyModelClass class]MyModelClass.self .看看ViewController.mMessage.h了解如何使用此功能的简单实现。

我仍在测试如何制作一个可以合并到客户端库中的更健壮的版本(它可能看起来像 -valueAsObject:(Class)class 所以你可以做类似的事情MyClass *customClass = [snapshot valueAsObject:[MyClass class]];) 不知道这是否真的可行,或者它是否会出现。

关于swift - 将快照解析为模型 - FirebaseUI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33710837/

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