加入我们,从10月8日至10日在纽约市学习最新的 GraphQL Federation 和 API 工程和新闻提示。加入我们,参加2024年纽约市的 GraphQL 大会
文档
免费开始

7. 移动更多相关信息到列表


返回到LaunchList.graphql。您的 已经获取了您想要显示的大部分信息,但是展示任务名称和补丁图案将更合适。

查看沙箱浏览器中的模式,您可以看到 Launch 有一个 mission 属性,允许您获取任务详情。任务有 namemissionPatch 属性,missionPatch 可以选择性地传递一个参数来指定所需的尺寸。

由于加载带有大图像的列表视图可能会影响性能,请请求名称和 SMALL 任务补丁。更新您的 query 如下:

LaunchList.graphql
query LaunchList {
launches {
hasMore
cursor
launches {
id
site
mission {
name
missionPatch(size: SMALL)
}
}
}
}

当你重新运行代码生成后,如果你查看LaunchListQuery.graphql.swift,你会看到一个新嵌套类型Mission,带有了你请求的两个属性。

任何字段都可以接受,例如上面的missionPatch。参数可以是或复杂类型。在这种情况下SMALL中的一个枚举SMALL可以接受有限值的列表。如果你查看Sandbox中的模式部分,你可以看到一个枚举列表。然后你可以点击查看PatchSize只能接受两个值:SMALLLARGE

The patch size enum in Sandbox's Schema tab

将数据连接到UI

前往LaunchRow.swift并在文件的顶部添加以下导入:

LaunchRow.swift
import RocketReserverAPI
import SDWebImageSwiftUI
import SwiftUI

接下来替换现有的placeholderImg引用,使用以下代码:

LaunchRow.swift
if let missionPatch = launch.mission?.missionPatch {
WebImage(url: URL(string: missionPatch))
.resizable()
.placeholder(placeholderImg)
.indicator(.activity)
.scaledToFit()
.frame(width: 50, height: 50)
} else {
placeholderImg
.resizable()
.scaledToFit()
.frame(width: 50, height: 50)
}

最后更新任务的文本标签

LaunchRow.swift
VStack(alignment: .leading) {
Text(launch.mission?.name ?? "Mission Name")
Text(launch.site ?? "Launch Site")
.font(.system(size: 14))
}

测试你的查询

构建并运行应用程序,你将看到所有关于当前的信息。

Add info to List

如果你向下滚动,你会看到列表只包括大约20次发射。这是因为发射列表是分页的,你只检索了第一页。

接下来,你将使用基于光标的加载系统来加载所有发射列表

上一页
6. 将你的查询连接到你的UI
下一页
8. 分页结果
评价文章评价在GitHub上编辑编辑论坛Discord

©2024Apollo Graph Inc.,即Apollo GraphQL。

隐私政策

公司