GraphQL对象按目标映射具有不同架构的Apollo

时间:2018-08-28 07:34:12

标签: ios swift mapping graphql apollo

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

我已经实现了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成功构建我的应用?

1 个答案:

答案 0 :(得分:1)

为目标B进行构建时,编译器不知道存在filter(bool, ...)的不同类定义,该定义特定于目标A。这意味着此错误是编译时错误,并且是唯一可能的错误。解决它的方法是在编译时解决它。

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

设置如下:

  1. 在其中一个目标位置None上和另一位置str.join下进行构建设置

enter image description here

  1. 在编译时使用GetAnnuaireFromSearchQuery.Data.Directory.Edge.Node区分目标

    TARGET_A