Ios 有没有办法在Swift中加载带有导航链接的功能?
我想知道是否有办法在Swift中调用带有导航链接的函数。我有一个帖子列表的详细视图,但为了获得该详细帖子视图的所有信息,我需要调用一个fetcher函数来加载一堆额外的信息,而这些信息是我在初始调用时无法获取的,因为这将大大增加发帖子的初始请求时间。类似于下面的内容,请记住,这绝对不是它的外观,而是我想象中的工作方式Ios 有没有办法在Swift中加载带有导航链接的功能?,ios,swift,swiftui,Ios,Swift,Swiftui,我想知道是否有办法在Swift中调用带有导航链接的函数。我有一个帖子列表的详细视图,但为了获得该详细帖子视图的所有信息,我需要调用一个fetcher函数来加载一堆额外的信息,而这些信息是我在初始调用时无法获取的,因为这将大大增加发帖子的初始请求时间。类似于下面的内容,请记住,这绝对不是它的外观,而是我想象中的工作方式 List(self.posts) { result in NavigationLink(call: PostFetchingFunction(PostID: result.I
List(self.posts) { result in
NavigationLink(call: PostFetchingFunction(PostID: result.ID) -> destination: DetailedPostView(post: PostFetchingFunction.result)) {
Text("Go to detailed post view")
}
}
正如我所说,这肯定不是正确的Swift代码,但仅仅是我想做的代码可视化可能会有所帮助。您可以使用符合
ObservieObject
1.内容视图
- 目的地是
NextView
需要类型为NextView
的东西进行初始化(我们稍后会看到)ItemProvider
2.下一代观察
是一个ItemProvider
,它使它成为更改的侦听器,以便更新视图@ObservedObject
是我们运行函数的地方,在本例中是.onAppear
以获取self.provider.load()
提供程序开始获取
3.项目提供者
必须符合ItemProvider
才能发出更改observeobject
- 标记为
的任何变量将发出更改信号@Published
有一个ItemProvider
函数,该函数实际执行抓取操作,如果它更新了任何load
变量,将通知连接的@发布的
并自动更新视图
struct ContentView: View {
var body: some View {
NavigationView {
List(0...100, id: \.self) { (index) in
NavigationLink("Show \(index)",
destination: NextView(provider: ItemProvider(id: index)))
}
.navigationBarTitle("List")
}
}
}
struct NextView: View {
@ObservedObject var provider: ItemProvider
var body: some View {
Text(provider.title)
.navigationBarTitle("Item", displayMode: .inline)
.onAppear {
self.provider.load()
}
}
}
class ItemProvider: ObservableObject {
private var id: Int
@Published var title: String = ""
init(id: Int) {
self.id = id
}
func load() {
title = "Loading \(id)"
DispatchQueue.main.asyncAfter(deadline: .now() + 2) { [weak self] in
guard let _weakSelf = self else { return }
_weakSelf.title = "Loaded \(_weakSelf.id)"
}
}
}