使用 @Environment(\.dismiss) 时“变量在初始化之前使用”

xvo*_*rsx 4 swift swiftui

我试图拥有一个非常简单的 SwiftUI 视图层次结构:父级和子级。孩子应该能够通过点击按钮自行关闭。

下面的代码工作正常

struct ContentView: View {
    var body: some View {
        NavigationView {
            NavigationLink {
                ChildView()
            } label: {
                Text("Go")
            }
        }
    }
}

struct ChildView: View {
    
    @Environment(\.dismiss) var dismiss
    
    var body: some View {
        Text("Hello, world!")
            .padding()
        Button(action: {
            dismiss()
        }, label: {
            Text("Dismiss")
        })
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试添加一个简单的状态init()到 ChildView 时,我遇到了编译错误

import SwiftUI

struct ContentView: View {
    var body: some View {
        NavigationView {
            NavigationLink {
                ChildView(foo: 42)
            } label: {
                Text("Go")
            }
        }
    }
}

struct ChildView: View {
    
    @Environment(\.dismiss) var dismiss
    @State private var myInt: Int
    
    init(foo: Int) {
        self.myInt = foo // <--- ERROR IS HERE, "Variable 'self.myInt' used before being initialized"
    }
    
    var body: some View {
        Text("Hello, world!")
            .padding()
        Button(action: {
            dismiss()
        }, label: {
            Text("Dismiss")
        })
    }
}
Run Code Online (Sandbox Code Playgroud)

这个错误非常令人费解。我尝试了不同的方法,据我所知,问题在于 和 的init()组合@Environment(\.dismiss)。但在真正的项目中我确实需要同时拥有它们。

有人知道错误的原因是什么或如何修复它?

Xcode版本:13.4.1

Chr*_*isR 6

var@State必须以不同的方式初始化:

self._myInt = State(initialValue: foo)
Run Code Online (Sandbox Code Playgroud)