#ios #swift #swiftui
#iOS #swift #swiftui
Вопрос:
Я устанавливаю несколько переменных среды в приложении моего приложения SwiftUI, и одна из них не может быть найдена дочерними представлениями, и я не могу понять, почему !?!
import SwiftUI
@main
struct MentalMathSwiftUIApp: App {
@ObservedObject var buttonState = ButtonState()
var body: some Scene {
WindowGroup {
MainView()
.environmentObject(buttonState)
}
}
}
buttonState
class ButtonState: ObservableObject{
enum ButtonState: String {
case STOPPED
case ACTIVE
case PAUSED
}
@Published var currentButtonState: ButtonState = .STOPPED
Основной вид
struct MainView: View {
@EnvironmentObject var buttonState: ButtonState
init(){
var t = buttonState.currentButtonState <- **Fatal error: No ObservableObject of type ButtonState found. A View.environmentObject(_:) for ButtonState may be missing as an ancestor of this view.**
}
var body: some View {
VStack {
Text("Mental Maths!")
.font(.largeTitle)
.fontWeight(.heavy)
ContainerView()
MainButtonView()
}
}
}
Делайте все возможное, чтобы игнорировать бессмысленную логику в init()
of MainView
, но почему я не могу извлечь buttonState из переменной среды на данный момент?
Ответ №1:
Инициализатор выполняется до .environmentObject
того, как может быть вызван для ввода @EnvironmentObject
. Вот почему попытка получить доступ к указанному объекту среды из init
вызывает фатальную ошибку.
Вы должны ввести объект в init вместо того, чтобы устанавливать его как an @EnvironmentObject
, чтобы избежать сбоев во время выполнения.
struct MainView: View {
@ObservedObject var buttonState: ButtonState
var body: some View {
VStack {
Text("Mental Maths!")
.font(.largeTitle)
.fontWeight(.heavy)
ContainerView()
MainButtonView()
}
}
}
@main
struct MentalMathSwiftUIApp: App {
@ObservedObject var buttonState = ButtonState()
var body: some Scene {
WindowGroup {
MainView(buttonState: buttonState)
}
}
}