GraphQL for Swift: Apollo iOS — 适用于 iOS 和 macOS 的客户端

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

Apollo iOS: 适用于 Swift 应用的强大 GraphQL 客户端



Apollo iOS 是一款现代、类型安全的库,用于在 Apple 平台(iOS、macOS、tvOS 和 watchOS)上使用 GraphQL API。由 Apollo GraphQL 公司开发,它为开发者提供了执行查询、变更和订阅的便捷工具,能够根据您的 GraphQL 模式自动生成严格类型化的 Swift 代码。



该库非常适合构建需要灵活数据处理、缓存和高性能的现代移动和桌面应用。Apollo iOS 省去了手动解析 JSON 的麻烦,并在编译阶段提供完整的类型安全。



主要功能

  • 自动代码生成 — 基于 .graphql 文件和服务器模式,生成类型化的数据模型、查询和变更。
  • 规范化缓存 — 内置缓存可在数据变化时自动更新 UI,避免对象重复。
  • 支持 WebSocket 订阅 — 为聊天、通知和其他动态数据提供实时更新。
  • 与 SwiftUI 和 Combine 集成 — 原生异步 Publisher 和 ObservableObject,支持响应式编程。
  • 多线程 — 所有网络请求在后台执行,主线程保持空闲以处理 UI。
  • 支持文件上传 — 通过 multipart 请求处理图片和文档的发送。


通过 Swift Package Manager 安装

通过 Xcode 或 Package.swift 将 Apollo iOS 添加到您的项目:

// Package.swiftdependencies: [    .package(url: "https://github.com/apollographql/apollo-ios.git",              from: "1.0.0")]


示例:配置客户端并执行查询

创建一个客户端实例并执行简单的 GraphQL 查询以获取用户列表:

import Apollo

// 1. 创建客户端let url = URL(string: "https://api.example.com/graphql")!let store = ApolloStore()let client = ApolloClient(url: url, store: store)

// 2. 定义查询(文件 Users.graphql)// query GetUsers { users { id name email } }

// 3. 执行查询client.fetch(query: GetUsersQuery()) { result in switch result { case .success(let graphQLResult): if let users = graphQLResult.data?.users { for user in users { print("\\(user.name) — \\(user.email)") } } case .failure(let error): print("错误: \\(error.localizedDescription)") }}


使用变更(修改数据)

创建新用户的变更示例:

// mutation CreateUser($name: String!, $email: String!) {//   createUser(name: $name, email: $email) { id name email }// }

let mutation = CreateUserMutation(name: "伊万·彼得罗夫", email: "ivan@example.com")

client.perform(mutation: mutation) { result in switch result { case .success(let graphQLResult): if let newUser = graphQLResult.data?.createUser { print("已创建用户: \\(newUser.id)") } case .failure(let error): print("创建错误: \\(error)") }}


订阅(实时更新)

要获取实时数据,请使用订阅。需要 WebSocket 传输:

import ApolloWebSocket

let webSocketTransport = WebSocketTransport( request: URLRequest(url: URL(string: "wss://api.example.com/graphql")!))let store = ApolloStore()let client = ApolloClient(networkTransport: webSocketTransport, store: store)

// subscription OnUserAdded { userAdded { id name } }let subscription =

推荐