Ios 从初始值设定项返回,但不初始化所有存储的属性-SwiftUI绑定错误

Ios 从初始值设定项返回,但不初始化所有存储的属性-SwiftUI绑定错误,ios,swift,swiftui,uikit,Ios,Swift,Swiftui,Uikit,我有几个级联模型需要根据一些后台进程进行刷新。为了实现这一点,我创建了一个结构,其中保存了UI的所有逻辑,并使用UIHostingController.initrootView:views调用了几个SwiftUI视图 当我想通过单击子视图中的按钮来关闭视图时,挑战就来了。我试图使用@State和@Binding,但Binding迫使我在子视图中初始化变量 以下是孩子的代码: struct ResultViewSilence: View { @Binding var isDismissView:

我有几个级联模型需要根据一些后台进程进行刷新。为了实现这一点,我创建了一个结构,其中保存了UI的所有逻辑,并使用UIHostingController.initrootView:views调用了几个SwiftUI视图

当我想通过单击子视图中的按钮来关闭视图时,挑战就来了。我试图使用@State和@Binding,但Binding迫使我在子视图中初始化变量

以下是孩子的代码:

struct ResultViewSilence: View {

@Binding var isDismissView: Bool
var hasSilence: Bool
let photolibrary = PhotoLibrary()

init(hasSilence: Bool) {
    self.hasSilence = hasSilence
    <--- here is where is asking to initialize isDismissView, but it should not be needed
}
我也在检查@State变量,即使按钮被触发也不会改变


干杯,

只需删除此inithasSilence:Bool初始化器,并根据类型在父级中使用两个参数创建ResultViewSilence。当然,问题是当我使用“ResultViewSilencehasSilence:isSilence,isDimissView:$isDismissView”执行此操作时,它会强制我在父级的初始化器中初始化它,它给了我另一个错误:self“在属性访问中使用”$isdismview“在初始化所有存储的属性之前”我认为正确的方法应该是直接避免初始化子init中的绑定,根据文档,它应该可以工作,但不确定为什么不能工作。这给我带来了另一个错误-这会增加一个问题,即如何做到这一点,我假设要解决的问题就在那里?通过在子视图中使用参数进行初始化,这迫使我从父视图调用它,并使用参数。结果是,它迫使我在父级本身中初始化变量,这似乎不可能通过使用ResultViewSilencehasSilence:isSilence,isDimissView:$isDimissView原样$isDimissView-self在初始化所有存储的属性之前使用。只需删除此inithasSilence:Bool initialiser,并根据类型在父级中使用两个参数创建ResultViewSilence。当然,问题是当我使用'ResultViewSilence:isSilence'执行此操作时,isDimissView:$isDimissView',它强制我在父项的初始值设定项中初始化它,并给我另一个错误:self“在属性访问中使用”$isDimissView“在初始化所有存储属性之前”我认为正确的方法应该是直接避免在子项初始化中初始化绑定,根据文档,它应该可以工作,但不确定为什么不能工作。这给我带来了另一个错误-这会增加一个问题,即如何做到这一点,我假设要解决的问题就在那里?通过在子视图中使用参数进行初始化,这迫使我从父视图调用它,并使用参数。结果是,它迫使我在父级本身中初始化变量,而在初始化所有存储的属性之前使用ResultViewSilencehasSilence:isSilence,isDimissView:$isDismissView,因为它使用$isDismissView-self,这似乎是不可能的。
import SwiftUI

struct ResultViewSilence: View {

    ///@State needs to be initialized here because it CAN store values
    ///https://developer.apple.com/documentation/swiftui/state
    @State var isDismissView1: Bool = false
    
    ///@Binding creates a 2 way connection does NOT store values needs a parent that stores values
    ///https://developer.apple.com/documentation/swiftui/binding
    @Binding var isDismissView2: Bool
    
    var hasSilence: Bool
    
    //let photolibrary = PhotoLibrary() //No code provided

    init(hasSilence: Bool, isDismissView2: Binding<Bool> ) {
        self.hasSilence = hasSilence
        self._isDismissView2 = isDismissView2
    }
    var body: some View {
        VStack{
            Text("isDismissView1 = " + isDismissView1.description)
            Text("isDismissView2 = " + isDismissView2.description)
        }
    }
}
struct ParentResultViewSilence: View {
    //Parent that can store values
    @State var isDismissView2: Bool = true
    var body: some View {
        ResultViewSilence(hasSilence: false, isDismissView2: $isDismissView2)
    }
}
struct ResultViewSilence_Previews: PreviewProvider {
    static var previews: some View {
        //ResultViewSilence(hasSilence: false, isDismissView2: .constant(true))
        ParentResultViewSilence()
    }
}
"Accessing State's value outside of being installed on a View. This will result in a constant Binding of the initial value and will not update."
import SwiftUI

struct ResultViewSilence: View {

    ///@State needs to be initialized here because it CAN store values
    ///https://developer.apple.com/documentation/swiftui/state
    @State var isDismissView1: Bool = false
    
    ///@Binding creates a 2 way connection does NOT store values needs a parent that stores values
    ///https://developer.apple.com/documentation/swiftui/binding
    @Binding var isDismissView2: Bool
    
    var hasSilence: Bool
    
    //let photolibrary = PhotoLibrary() //No code provided

    init(hasSilence: Bool, isDismissView2: Binding<Bool> ) {
        self.hasSilence = hasSilence
        self._isDismissView2 = isDismissView2
    }
    var body: some View {
        VStack{
            Text("isDismissView1 = " + isDismissView1.description)
            Text("isDismissView2 = " + isDismissView2.description)
        }
    }
}
struct ParentResultViewSilence: View {
    //Parent that can store values
    @State var isDismissView2: Bool = true
    var body: some View {
        ResultViewSilence(hasSilence: false, isDismissView2: $isDismissView2)
    }
}
struct ResultViewSilence_Previews: PreviewProvider {
    static var previews: some View {
        //ResultViewSilence(hasSilence: false, isDismissView2: .constant(true))
        ParentResultViewSilence()
    }
}