ios - GraphQL 对象按目标映射具有不同模式的 Apollo

标签 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 构建我的应用程序?

最佳答案

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

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

设置如下:

  1. 在一个目标的build设置下放置 TARGET_A 并在另一个位置 TARGET_B

enter image description here

  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
    }
    

关于ios - GraphQL 对象按目标映射具有不同模式的 Apollo,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52052442/

相关文章:

mysql - 我可以创建从列中的整数值到它们在 sql 中表示的文本值的映射吗?

javascript - 将一些对象键映射到对象中

ios - 为什么当消息太长时 iOS UIAlertController 会中断?

ios - 纠正现有应用程序中 VC 之间的导航

ios - 返回 UITableView 的值

ios - 使用代码 "setImage"设置按钮图像时出现问题

java - Swift 相当于 String.format 和 .Replace?

ios - UILocalNotification 没有出现

ios - 断断续续的 CATextLayer 动画 : fontSize + position concurrently

java - 将域对象映射到 Java 中的 Web 服务代理对象