Я новичок в быстром программировании. Я пытался поиграть с объектом среды для обновления представлений, изменив значение объекта среды специально с помощью функции класса. У меня есть два подпредставления в представлении содержимого, так как я sh проверяю, обновляются ли оба подпредставления вместе, когда строка изменяется в объекте среды UserData.
Однако возникает ошибка: «Поток 1: Неустранимая ошибка: Не найдено ObservableObject типа UserData. Может отсутствовать View.environmentObject (_ :) для UserData ... '
В SceneDelagate.swift я ввел объект среды:
let userData = UserData()
window.rootViewController = UIHostingController(rootView:contentView.environmentObject(userData))
UserData.swift
final class UserData: ObservableObject {
@Published var image: UIImage? = nil
@Published var string = ""
}
StringGenerator.swift
class StringGenerator {
@EnvironmentObject var userData: UserData
func changeURL(){
print("Changing string now from \(userData.string)")
if self.userData.string == "HELLO"{
self.userData.string = "BYE"
}
else{
self.userData.string = "HELLO"
}
print("to \(userData.string)")
}
}
SubView1.swift
struct SubView1: View {
@EnvironmentObject var userData: UserData
var body: some View {
Text("\(userData.string)")
}
}
SubView2.swift
struct SubView2: View {
@EnvironmentObject var userData: UserData
var body: some View {
Text("\(userData.string)")
}
}
ContentView.swift
struct ContentView: View {
@EnvironmentObject var userData: UserData
let stringGenerator = StringGenerator()
var body: some View {
VStack{
Button(action: {
print("Changing Text Now !")
self.stringGenerator.changeURL()
print("\(self.userData.string)")
}) {
Text("Change Text ")
}
SubView1()
SubView2()
}
}
}
В общем, я хочу sh знать, как изменить объект среды с помощью функции класса.
Код вылетает, когда я его запускаю. В чем проблема?