GraphQL-iOS的配置(Swift)

参考: https://www.apollographql.com/docs/ios/ 官方文档
GraphiQL工具:https://n1kqy.sse.codesandbox.io/

首先 pod "Apollo"

导入完之后打开项目(下图中的项目是我已经配置好了的,所以有些没有的文件和脚本不用管)

1.png

首先按照上图中的顺序依次选择 添加一个新脚本,并把名称改为 Apollo CLI,再拖动到DependenciesCompile Sources之间,如下图

2.png

3.png

再在脚本的文本框粘贴:(这个意思是下载服务器的schema.json文件)

SCRIPT_PATH="${PODS_ROOT}/Apollo/scripts"
cd "${SRCROOT}/${TARGET_NAME}"
"${SCRIPT_PATH}"/run-bundled-codegen.sh schema:download --endpoint="https://n1kqy.sse.codesandbox.io/"

编译代码,完成后项目文件夹里会多一个 schema.json 文件

4.png

把它拖到项目里,可以不勾选Add to target (因为它只用于生成添加到target的代码)

然后可以在 GraphiQL工具:https://n1kqy.sse.codesandbox.io/ 的网站上输入以下内容,点击运行。会得到等下在项目里要请求的数据,可用做对比

query LaunchList {
  launches {
    cursor
    hasMore
    launches {
      id
      site
    }
  }  
}
image.png

再回到Xcode里,新建一个空文件模板,命名为 LaunchList.graphql,将其保存在与schema.json文件相同的级别目录(LaunchList是上面你创建的模型的名字)

image.png

将上面GraphiQL中输入的内容复制粘贴到.graphql文件中

接下来回到刚才添加脚本的地方,把最后一行注释掉(前面输入一个#),然后在下面粘贴下面的代码

"${SCRIPT_PATH}"/run-bundled-codegen.sh codegen:generate --target=swift --includes=./**/*.graphql --localSchemaFile="schema.json" API.swift

编译一下,schema.json同一目录下会出现一个API.swift,将它拖入到xcode中,并且勾选Add to target

打开API.swift文件,会看到里面的结构和LaunchListQuery是匹配的。如果在LaunchList.graphql中注释掉id属性,再次编译,API.swift文件里的id也随之不见了。

这一系列操作完成后,现在你的项目目录应该是这样的,多了红框中的3个文件

image.png

之后就可以开始用代码进行测试了

class Network {
  static let shared = Network() 
    
  private(set) lazy var apollo = ApolloClient(url: URL(string: "https://n1kqy.sse.codesandbox.io/")!)
}

···

Network.shared.apollo.fetch(query: LaunchListQuery()) { result in
  switch result {
  case .success(let graphQLResult):
    print("Success! Result: \(graphQLResult)")
  case .failure(let error):
    print("Failure! Error: \(error)")
  }
}

如果一切没什么问题的话控制台会打印类似下面的内容:

image.png

OK,这样就集成完毕了,实际使用的话,只需把脚本和代码里的服务器地址模型属性改为自己的就行了, 更多的操作请自行查看官方文档

你可能感兴趣的:(GraphQL-iOS的配置(Swift))