- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我目前正从 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.m和 Message.h了解如何使用此功能的简单实现。
我仍在测试如何制作一个可以合并到客户端库中的更健壮的版本(它可能看起来像 -valueAsObject:(Class)class
所以你可以做类似的事情MyClass *customClass = [snapshot valueAsObject:[MyClass class]];
) 不知道这是否真的可行,或者它是否会出现。
关于swift - 将快照解析为模型 - FirebaseUI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33710837/
我一直在使用 AJAX 从我正在创建的网络服务中解析 JSON 数组时遇到问题。我的前端是一个简单的 ajax 和 jquery 组合,用于显示从我正在创建的网络服务返回的结果。 尽管知道我的数据库查
很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开,visit the help center . 关闭 1
我在尝试运行 Android 应用程序时遇到问题并收到以下错误 java.lang.NoClassDefFoundError: com.parse.Parse 当我尝试运行该应用时。 最佳答案 在这
有什么办法可以防止etree在解析HTML内容时解析HTML实体吗? html = etree.HTML('&') html.find('.//body').text 这给了我 '&' 但我想
我有一个有点疯狂的例子,但对于那些 JavaScript 函数作用域专家来说,它看起来是一个很好的练习: (function (global) { // our module number one
关闭。此题需要details or clarity 。目前不接受答案。 想要改进这个问题吗?通过 editing this post 添加详细信息并澄清问题. 已关闭 8 年前。 Improve th
我需要编写一个脚本来获取链接并解析链接页面的 HTML 以提取标题和其他一些数据,例如可能是简短的描述,就像您链接到 Facebook 上的内容一样。 当用户向站点添加链接时将调用它,因此在客户端启动
在 VS Code 中本地开发时,包解析为 C:/Users//AppData/Local/Microsoft/TypeScript/3.5/node_modules/@types//index而不是
我在将 json 从 php 解析为 javascript 时遇到问题 这是我的示例代码: //function MethodAjax = function (wsFile, param) {
我在将 json 从 php 解析为 javascript 时遇到问题 这是我的示例代码: //function MethodAjax = function (wsFile, param) {
我被赋予了将一种语言“翻译”成另一种语言的工作。对于使用正则表达式的简单逐行方法来说,源代码过于灵活(复杂)。我在哪里可以了解更多关于词法分析和解析器的信息? 最佳答案 如果你想对这个主题产生“情绪化
您好,我在解析此文本时遇到问题 { { { {[system1];1;1;0.612509325}; {[system2];1;
我正在为 adobe after effects 在 extendscript 中编写一些代码,最终变成了 javascript。 我有一个数组,我想只搜索单词“assemble”并返回整个 jc3_
我有这段代码: $(document).ready(function() { // }); 问题:FB_RequireFeatures block 外部的代码先于其内部的代码执行。因此 who
背景: netcore项目中有些服务是在通过中间件来通信的,比如orleans组件。它里面服务和客户端会指定网关和端口,我们只需要开放客户端给外界,服务端关闭端口。相当于去掉host,这样省掉了些
1.首先贴上我试验成功的代码 复制代码 代码如下: protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec)
什么是 XML? XML 指可扩展标记语言(eXtensible Markup Language),标准通用标记语言的子集,是一种用于标记电子文件使其具有结构性的标记语言。 你可以通过本站学习 X
【PHP代码】 复制代码 代码如下: $stmt = mssql_init('P__Global_Test', $conn) or die("initialize sto
在SQL查询分析器执行以下代码就可以了。 复制代码代码如下: declare @t varchar(255),@c varchar(255) declare table_cursor curs
前言 最近练习了一些前端算法题,现在做个总结,以下题目都是个人写法,并不是标准答案,如有错误欢迎指出,有对某道题有新的想法的友友也可以在评论区发表想法,互相学习🤭 题目 题目一: 二维数组中的
我是一名优秀的程序员,十分优秀!