我很难在 SwiftUI 中创建 UIKit 中一个非常常见的用例。
这是场景。假设我们要创建一个主/从应用程序,用户可以在其中从列表中选择一个项目并导航到包含更多详细信息的屏幕。
为了摆脱ListApple 教程和 WWDC 视频中的常见示例,该应用程序需要从 REST API 获取每个屏幕的数据。
问题:SwiftUI 的声明性语法会导致所有目标视图一List出现就创建。
这是一个使用 Stack Overflow API 的示例。第一个屏幕中的列表将显示问题列表。选择一行将打开第二个屏幕,显示所选问题的正文。完整的 Xcode 项目在 GitHub 上)
首先,我们需要一个表示问题的结构。
struct Question: Decodable, Hashable {
let questionId: Int
let title: String
let body: String?
}
struct Wrapper: Decodable {
let items: [Question]
}
Run Code Online (Sandbox Code Playgroud)
(Wrapper需要该结构,因为 Stack Exchange API 将结果包装在 JSON 对象中)
然后,我们BindableObject为第一个屏幕创建一个,它从 REST API 获取问题列表。
class QuestionsData: BindableObject {
let didChange = PassthroughSubject<QuestionsData, Never>()
var questions: …Run Code Online (Sandbox Code Playgroud) Apple Swift编程语言指南提到了init的存在!初始化程序,但没有提供任何示例.(在此页面中搜索init!)
我理解使用用init?声明的普通可用初始化程序,但是我没有得到这个其他版本的需要.需要什么?有人可以提供一个例子吗?