操作参数
GraphQL 操作可以在它们的定义中定义参数,这些参数的值可以传递到字段参数或指令参数(例如。@skip
和@include
)。
Apollo iOS为您生成安全初始化器操作,这些初始化器可以接受您的操作参数。这些参数可以是内置标量类型、自定义标量、枚举或输入对象在您的架构中定义。
假设我们定义了一个名为 GraphQL 查询的变量,名为 HeroName
,它有一个自定义的 Episode
枚举参数,该参数在模式中定义:
query HeroName($episode: Episode!) {hero(episode: $episode) {name}}
Apollo iOS 将生成一个 HeroNameQuery
类,带有 变量:
class HeroNameQuery: GraphQLQuery {...var episode: Episodeinit(episode: Episode) {self.episode = episode}}
您的 HeroNameQuery
将有一个用于 episode
变量 的属性,该变量将被传递到使用 field 或 directive 参数中的任何 $episode
变量。
此 query 对象可以初始化并传递给 ApolloClient.fetch(query:)
:
apollo.fetch(query: HeroNameQuery(episode: .empire)) { result inguard let data = try? result.get().data else { return }print(data.hero.name) // Luke Skywalker}
处理可为空的参数
当定义一个具有可空值的操作参数时,Apollo iOS会将生成的参数类型包装在泛型GraphQLNullable
包装器枚举中。
根据GraphQL规范,显式地为字段的null
值设置与完全不提供值在语义上有所不同(nil
))。这个枚举允许你区分你的输入值之间的null
和nil
。
如果将HeroName
查询定义为一个有可空episode
参数,生成的HeroNameQuery
将有一个类型为GraphQLNullable<Episode>
的episode
字段:
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
文档。
默认值
定义你的操作的参数时,可以为参数提供默认值。这些默认参数将包含在生成操作的初始化器中:
query HeroName($episode: Episode! = .EMPIRE) {hero(episode: $episode) {name}}
class HeroNameQuery: GraphQLQuery {...var episode: Episodeinit(episode: Episode = .empire) {self.episode = episode}}
注意:这仅适用于由客户端定义的操作参数。
输入对象的字段的默认值由模式定义,不生成。