【问题标题】:GraphQL Object mapping Apollo with different schema by targetGraphQL 对象映射 Apollo 与目标不同的模式
【发布时间】:2019-02-02 18:24:22
【问题描述】:

我有一个包含多个目标的项目。

我已经实现了 Apollo 来使用 GraphQL 请求数据库。目标的架构略有相同,但存在一些差异:+1 或 2 个字段,具体取决于目标。

我可以成功构建我的应用程序,因为我已将构建阶段更改为仅构建 *common.graphql 和 *targetname.graphql

所以当目标 A 有这样的 AnnuaireFragment 时:

fragment AnnuaireFragment on Directory {
    id
    test
}

目标 B 有这样的 AnnuaireFragment:

fragment AnnuaireFragment on Directory {
    id
}

一切都可以构建,碎片被分离。

我希望当我使用翻译器时我也可以构建。我可以为两个目标只使用一个翻译器吗?

static func translateFromAnnuaireNode(annuaireNode: GetAnnuaireFromSearchQuery.Data.Directory.Edge.Node) -> ContactModel {
            let contactModel = ContactModel()
            contactModel._id = annuaireNode.id
            // Here that doesn't build for target B because annuaireNode.test doesn't exist
            contactModel.test = annuaireNode.test

            return contactModel
}

我怎样才能成功地为目标 A 和 B 构建我的应用程序?

【问题讨论】:

    标签: ios swift mapping graphql apollo


    【解决方案1】:

    在为目标 B 构建时,编译器不知道存在 GetAnnuaireFromSearchQuery.Data.Directory.Edge.Node 的不同类定义,这是特定于目标 A 的。这意味着此错误是编译时错误,并且是唯一可能的方法解决它是在编译时解决它。

    我能想出的可能解决方案是针对不同的目标使用不同的编译条件。

    设置如下:

    1. 在您的一个目标位置TARGET_A 和另一个位置TARGET_B 的构建设置下

    1. 在编译时使用#if 区分目标

      static func translateFromAnnuaireNode(annuaireNode: GetAnnuaireFromSearchQuery.Data.Directory.Edge.Node) -> ContactModel {
          let contactModel = ContactModel()
          contactModel._id = annuaireNode.id
      
      
          #if TARGET_A
          //The code here will only be compiled when building target A
          contactModel.test = annuaireNode.test
          #endif
      
          return contactModel
      }
      

    【讨论】:

    • 你说得对,这行得通,谢谢! :) 我等着看是否有其他解决方案,如果没有,我会检查是否接受的答案!
    猜你喜欢
    • 2017-03-26
    • 2010-09-10
    • 2018-10-28
    • 2012-03-17
    • 2022-10-23
    • 2019-03-01
    • 2019-11-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多