Как связать переменную среды ios17
С новым@Observable
макрос, представленный для iOS 17, теперь мы можем использовать объекты среды следующим образом
@Environment(MyType.self) var myTypeObj
Сейчас еслиmyTypeObj
имеет какое-то имущество, назовите егоmyProperty
который я хотел бы передать как привязку где-нибудь, используя$
синтаксиса, Swift жалуется, что не может найти переменную. Например,
Picker("My Picker", selection: $myTypeObj.myProperty) { // we get an error on this line
ForEach(1 ... 50, id: \.self) { num in
...
}
}
мы получаем сообщение об ошибкеCannot find $myTypeObj in scope
. Это ошибка Swift или я делаю что-то не так?
2 ответа
В iOS 17 вам нужно использовать Bindable.
@Observable
class AppState {
var isOn: Bool = false
}
struct ContentView: View {
@Environment(AppState.self) private var appState
var body: some View {
@Bindable var bindable = appState
VStack {
Toggle("Is On", isOn: $bindable.isOn)
}
.padding()
}
}
#Preview {
ContentView()
.environment(AppState())
}
Для себя и других я также думаю, что Азамшарп в своем видео введите описание ссылки, упомянутое здесь, чтобы привязка работала, нам нужно использовать отдельное представление для привязки. Но здесь мы видим, что есть и другой путь:
- @Environment(AppState.self) частная переменная appState
- @Bindable varbindable = appState, но самое главное : этот @Bindable помещается в «представление тела».