我有一个包含多个目标的项目。
我已经实现了 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。这意味着这错误是编译时错误,解决它的唯一可能方法是在编译时解决它。
我能想到的可能的解决方案是针对不同的目标使用不同的编译条件。
设置如下:
- 在一个目标的build设置下放置
TARGET_A
并在另一个位置TARGET_B
下
使用
#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/