加入我们,从10月8日至10日,在纽约市学习最新的 GraphQL 联邦和 API 平台工程技巧、趋势和新闻。加入我们,在纽约市 GraphQL Summit 2024
文档
免费开始

操作参数


可以在它们的定义中定义参数,这些参数的值可以传递到字段参数或指令参数(例如。@skip@include)。

为您生成安全初始化器操作,这些初始化器可以接受您的操作参数。这些参数可以是内置标量类型自定义标量枚举输入对象在您的架构中定义。

假设我们定义了一个名为 GraphQL 的变量,名为 HeroName,它有一个自定义的 Episode 枚举参数,该参数在模式中定义:

HeroNameQuery.graphql
query HeroName($episode: Episode!) {
hero(episode: $episode) {
name
}
}

Apollo iOS 将生成一个 HeroNameQuery 类,带有

HeroNameQuery.graphql.swift
class HeroNameQuery: GraphQLQuery {
...
var episode: Episode
init(episode: Episode) {
self.episode = episode
}
}

您的 HeroNameQuery 将有一个用于 episode 的属性,该变量将被传递到使用 fielddirective 参数中的任何 $episode 变量。

query 对象可以初始化并传递给 ApolloClient.fetch(query:):

apollo.fetch(query: HeroNameQuery(episode: .empire)) { result in
guard let data = try? result.get().data else { return }
print(data.hero.name) // Luke Skywalker
}

处理可为空的参数

当定义一个具有可空值的操作参数时,Apollo iOS会将生成的参数类型包装在泛型GraphQLNullable包装器枚举中。

根据GraphQL规范,显式地为字段的null值设置与完全不提供值在语义上有所不同(nil))。这个枚举允许你区分你的输入值之间的nullnil

如果将HeroName 查询定义为一个有可空episode 参数,生成的HeroNameQuery 将有一个类型为GraphQLNullable<Episode>episode字段:

HeroNameQuery.graphql.swift
class HeroNameQuery: GraphQLQuery {
...
var episode: GraphQLNullable<Episode>
init(episode: GraphQLNullable<Episode>) {
self.episode = episode
}
}

可以初始化HeroNameQuery GraphQLNullable值:

空值
.init(episode: .null)
无值
.init(episode: .none)
.某些情况
.init(episode: .some(.empire))

或者使用nil 合并运算符来提供后备值。

.某些情况
let optionalEpisode: Episode?
.init(episode: optionalEpisode ?? .none)

更多使用信息请参见GraphQLNullable文档

默认值

定义你的操作参数时,可以为参数提供默认值。这些默认参数将包含在生成操作的初始化器中:

HeroNameQuery.graphql
query HeroName(
$episode: Episode! = .EMPIRE
) {
hero(episode: $episode) {
name
}
}
HeroNameQuery.graphql.swift
class HeroNameQuery: GraphQLQuery {
...
var episode: Episode
init(episode: Episode = .empire) {
self.episode = episode
}
}

注意:这仅适用于由客户端定义的操作参数

输入对象的字段的默认值由模式定义,不生成。

前一个
碎片
下一个
错误处理
评分文章评分

©2024Apollo Graph Inc.,即Apollo GraphQL。

隐私策略

公司