Я пытаюсь создать MenuBarExtra с динамическим содержимым, но содержимое не обновляется.
@main
struct MyApp: App {
@State var text = ""
var body: some Scene {
WindowGroup {
Text(text) // --------- 1
TextField("", text: $text)
}
MenuBarExtra("A") {
Text(text) // --------- 2
}
.menuBarExtraStyle(.window)
}
}
В приведенном выше коде Text[1] обновляется в реальном времени, но Text[2] не обновляется после первого появления MenuBarExtra.
SwiftUI, похоже, неправильно определяет зависимости дополнительной строки меню. Это может быть ошибка SwiftUI.
Вы можете обойти это, передав @Binding
в представление-оболочку.
@State var text = ""
var body: some Scene {
WindowGroup {
Text(text)
TextField("", text: $text)
}
MenuBarExtra("A") {
Wrapper(text: $text)
}
.menuBarExtraStyle(.window)
}
struct Wrapper: View {
@Binding var text: String
var body: some View {
Text(text)
}
}
Это также работает, если вы передаете ObservableObject
в @ObservedObject
или если вы передаете экземпляр @Observable
.
Спасибо @Sweeper. Он работает так, как ожидалось