基于另一个属性的地幔属性类别?

2024-04-28

如何使用 Github Mantle 根据同一类中的另一个属性来选择属性类? (或者在更坏的情况下 JSON 对象的另一部分)。

例如,如果我有一个像这样的对象:

{
  "content": {"mention_text": "some text"},
  "created_at": 1411750819000,
  "id": 600,
  "type": "mention"
}

我想制作一个这样的变压器:

+(NSValueTransformer *)contentJSONTransformer {
    return [MTLValueTransformer transformerWithBlock:^id(NSDictionary* contentDict) {
          return [MTLJSONAdapter modelOfClass:ETMentionActivityContent.class fromJSONDictionary:contentDict error:nil];
    }];
}

但传递给转换器的字典仅包含 JSON 的“内容”部分,因此我无权访问“类型”字段。有没有办法访问对象的其余部分?或者以某种方式将“内容”的模型类基于“类型”?

我以前被迫做这样的黑客解决方案:

+(NSValueTransformer *)contentJSONTransformer {
    return [MTLValueTransformer transformerWithBlock:^id(NSDictionary* contentDict) {
        if (contentDict[@"mention_text"]) {
            return [MTLJSONAdapter modelOfClass:ETMentionActivityContent.class fromJSONDictionary:contentDict error:nil];
        } else {
            return [MTLJSONAdapter modelOfClass:ETActivityContent.class fromJSONDictionary:contentDict error:nil];
        }
    }];
}

您可以通过修改来传递类型信息JSONKeyPathsByPropertyKey method:

+ (NSDictionary *)JSONKeyPathsByPropertyKey
{
    return @{
        NSStringFromSelector(@selector(content)) : @[ @"type", @"content" ],
    };
}

Then in contentJSONTransformer,您可以访问“type”属性:

+ (NSValueTransformer *)contentJSONTransformer 
{
    return [MTLValueTransformer ...
        ...
        NSString *type = value[@"type"];
        id content = value[@"content"];
    ];
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

基于另一个属性的地幔属性类别? 的相关文章

随机推荐

  • 通过宏根据工作表名称重新排序 Excel 工作表

    如果我的 Excel 文档中有 6 个工作表 按以下顺序命名和排列 O1 O2 O3 O1 2 O2 2 O3 3 是否可以编写一个宏来更改这些工作表的顺序 这是我正在寻找的序列 O1 O1 2 O2 O2 2 O3 O3 2 Thanks
  • XCTestExpectation:如何避免在等待上下文结束后调用fulfill方法?

    我正在使用 Xcode 6 的新异步测试功能 当异步任务在超时之前结束时 一切正常 但如果任务花费的时间超过超时时间 事情就会变得更加复杂 这是我进行测试的方式 interface AsyncTestCase XCTestCase end
  • 使用递归查找数组中的最大值

    对于我被要求解决的问题之一 我使用 for 循环找到了数组的最大值 所以我尝试使用递归来找到它 这就是我想到的 public static int findMax int a int head int last int max 0 if h
  • 数据包丢失和数据包重复

    我试图找出数据包丢失和数据包重复问题之间的区别 有谁知道 数据包重复 是什么意思 和TCP检测到丢失时重传数据包一样吗 No In TCP 数据包 的传递是可靠的 我认为在这种情况下术语数据应该更好 因为它是面向流的协议 数据包丢失和重复是
  • iOS 滑块默认缩略图的大小?

    iOS 滑块的 默认 缩略图的确切尺寸 宽度 高度 是多少 是否有一些聪明的方法可以将其从系统 XCode iOS 中引诱出来 I tried int thumbWidth slider currentThumbImage size wid
  • res.cookie未在浏览器中设置cookie

    我目前正在尝试使用 React 客户端设置 Node Express 应用程序以与之交互 我设置了护照来处理 JWT 身份验证 当用户登录时 我验证电子邮件 密码 然后我设置cookie res cookie jwt token httpO
  • ViewModel 中的 MediaElement.play()

    我正在努力解决以下问题 我正在使用 MVVM 模式构建 WP8 应用程序 我的 view xaml 中有一个媒体元素 并且在 viewmodel cs 中有控制该媒体元素的逻辑 例如 播放 停止 暂停和音量 如何使用绑定从我的视图模型在此媒
  • 表“DBNAME.hibernate_sequence”不存在

    我有一个使用 spring data jpa 的 Spring Boot 2 0 1 RELEASE 应用程序
  • 为什么express服务器接收到的前端数据是未定义的?

    我目前正在开发社交媒体 Mern Stack React 应用程序 我使用 Node js 和 Express 作为我的后端服务 还使用 mongoose 来存储我的数据 并使用 axios 和 redux thunk 将后端连接到前端 到
  • TFS 2008 在编辑时自动检出代码

    我正在开发一个已添加到 TFS 服务器的 Visual Studio 2008 项目 我不确定为 TFS 配置了哪些设置和策略 这是由单独的部门而不是开发人员完成的 每次我对代码文件进行编辑时 都会自动检出该文件 无需自己显式检出代码文件
  • Xamarin.Android 应用程序仅在干净编译时找到启动器活动

    我有一个Xamarin Android标记为 MainLauncher 的活动称为 Login 当我第一次按 F5 时 应用程序在模拟器中正常启动 然后我停下来 进行一些代码更改 再次按 F5 我可以看到应用程序在模拟器中启动 当我收到以下
  • 从目标中包含/排除整个组

    我的项目有一个包含数百个文件的组 组织成几十个两级子组 该组中的文件本身经常被更改 我希望这些文件包含在某些目标中 但不包含在其他目标中 在 Xcode 3 x 中 每次更改组后 我只需获取有关组本身的信息 转到 目标 选项卡 然后 重新
  • Android Studio - 无法识别的 VM 选项“MaxPermSize=256m”

    我刚刚在 Elementary OS 0 3 Freya 上安装了 Android Studio 并使用终端运行它 然而 在我第一次启动时 显示一条错误消息 Gradle 测试 项目刷新失败 无法启动守护进程 这个问题可能是由 守护进程的配
  • 在 vs code 中连接到 Azure Devops 私有 NuGet

    我们有一个私人NuGet喂养 它一直与Visual Studio 我们的开发人员通过他们的联系Azure帐户与私人提要 我想在迁移到 VS Code 时保留相同的功能 使用找到的文档here https learn microsoft co
  • 连接 2 个控制器并可以访问第二个控制器中的第一个控制器属性

    我对角镖有疑问 1 个用于触发作用域的 html 文件和 2 个控制器类 索引 html subCtrl 用户名 第一控制器 Controller selector mainController publishAs mainCtrl cla
  • 纹理openGl。 C++、qt

    我试图用草纹理覆盖我的地形 由高度图制成 但它没有按预期工作 我什至无法在简单的 GL QUAD 上获取纹理 结果是多色网络 void GLWidget initializeGL glEnable GL TEXTURE 2D 在 QGLwi
  • 实体框架中的级联更新

    我有以下涉及 2 个类的场景 public class Parent Key public int Id get set Other properties here public virtual IList
  • 在本地主机(Chrome 和 FF)上,过期时间少于 1 年时未设置 cookie

    我在本地主机上遇到问题 并且在Chrome and Firefox not Edge 这段代码可以正常工作 并且会设置 cookie HttpPost public ActionResult Change string val var co
  • Jprofiler Linux 上的远程分析。如何更改探查器数据文件的路径

    我正在 Linux 盒子上运行 java java 6 应用程序并进行其他设置 agentpath home myuser jprofiler bin linux x64 libjprofilerti so nowait 端口 7777 在
  • 基于另一个属性的地幔属性类别?

    如何使用 Github Mantle 根据同一类中的另一个属性来选择属性类 或者在更坏的情况下 JSON 对象的另一部分 例如 如果我有一个像这样的对象 content mention text some text created at 1