SwiftUI视图生命周期,重新意大利化
我正在努力解决视图生命周期和快速视图重用问题 在本例中,我的视图可以使用不同的id重新初始化,然后必须异步显示用户名。我以前在OnAppear中运行loadData函数,但是在第一次加载之后它不会重新初始化。然而,现在我添加了init函数,我的状态和视图在任何init上都没有更新SwiftUI视图生命周期,重新意大利化,swift,swiftui,Swift,Swiftui,我正在努力解决视图生命周期和快速视图重用问题 在本例中,我的视图可以使用不同的id重新初始化,然后必须异步显示用户名。我以前在OnAppear中运行loadData函数,但是在第一次加载之后它不会重新初始化。然而,现在我添加了init函数,我的状态和视图在任何init上都没有更新 struct TestView: View { @State var userName : String = "" init(id: Int){
struct TestView: View {
@State var userName : String = ""
init(id: Int){
print("Init \(id)")
loadData(id: id)
}
var body: some View {
VStack{
if userName != "" {
Text(userName)
}
}
}
// function that will return username at some point in the future
private func loadData(id: Int){
let Obs: Observable<String> = manager.getUser(id: id)
Obs.subscribe(onNext: { user in
self.userName = user.userName
})
}
}
struct TestView:View{
@状态变量userName:String=“”
init(id:Int){
打印(“初始化\(id)”)
loadData(id:id)
}
var body:一些观点{
VStack{
如果用户名!“”{
文本(用户名)
}
}
}
//函数,该函数将在将来的某个时间返回用户名
私有函数加载数据(id:Int){
让Obs:Observable=manager.getUser(id:id)
Obs.subscribe(onNext:{user in
self.userName=user.userName
})
}
}
视图未重建,因为在提供的变量中,它被解释为相等(因为未存储不同的属性)
试试下面的方法
struct TestView: View {
let id: Int // << changing this should make view rebuild
@State private var userName : String = ""
var body: some View {
VStack{
if userName != "" {
Text(userName)
}
}
.onAppear {
print("Rebuild with: \(id)")
loadData(id: id)
}
.id(self.id) // << Update: this one !!
}
// function that will return username at some point in the future
private func loadData(id: Int){
let Obs: Observable<String> = manager.getUser(id: id)
Obs.subscribe(onNext: { user in
self.userName = user.userName
})
}
}
struct TestView:View{
let id:Int//使用onAppear的问题是它只运行一次,如果父视图将id更改为另一个值,它不会重新初始化:SetID为1,Rebuild为:1,SetID为2…..没有重新生成