如何解决如果ObservedObject的参数在swiftui中完全不变,如何防止视图不刷新
我有一个ObservedObject作为模型。在模型内部,我具有2个属性,其中1个用于初始化视图,而1个则用于显示全屏视图。我面临的问题是显示全屏视图时,ViewWithPara刷新了。我不知道为什么会这样,因为传递给ViewWithPara的参数根本没有改变,但仍然触发视图刷新。希望有人可以向我解释。谢谢
复制步骤
- 选中“显示按钮”以显示全屏,并使用以下代码将其关闭
init主视图init ViewWithPara 0 init ViewWithPara 0 init全屏 视图关闭全屏视图init ViewWithPara 0 init ViewWithPara 0
MainView
import SwiftUI
struct MainView: View {
@ObservedObject var viewModel : MainViewModel
// @State var showFullScreen : Bool = false
init(){
print("init Main View")
viewModel = MainViewModel.shared
}
var body: some View {
VStack{
ViewWithPara(para: self.viewModel.paraPassToAnotherView) //This view got refresh even
Button("Show"){
self.viewModel.showFullScreen = true
}
}
.fullScreenCover(isPresented: self.$viewModel.showFullScreen){
FullScreenView(closeFlag: self.$viewModel.showFullScreen)
}
}
}
MainViewModel
class MainViewModel : ObservableObject {
@Published var showFullScreen : Bool = false
@Published var paraPassToAnotherView : Int = 0
static let shared = MainViewModel()
}
ViewWithPara
struct ViewWithPara: View {
var para : Int
init(para : Int){
print("init ViewWithPara",para)
self.para = para
}
var body: some View {
Text("This is ViewWithPara View")
}
}
FullScreenView
struct FullScreenView: View {
@Binding var closeFlag : Bool
@State var text1 : String = ""
init(closeFlag : Binding<Bool>){
print("init FullScreen view")
self._closeFlag = closeFlag
}
var body: some View {
VStack{
TextField("text 1",text: self.$text1)
Button("Close"){
print("close FullScreen view")
self.closeFlag.toggle()
}
}
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。