Avatar
Observationを前提にすると、 @Environment でクラスを扱う場合に、 @EnvironmentObject みたいに $foo.barBinding 取り出せてほしいと思うんですけど、(iOS 17で)試してみたところできなそうだったんですが、何かいい方法ありますか?ドキュメント( https://developer.apple.com/documentation/swiftui/environment )見ても EnvironmentprojectedValue は見当たらず・・・ 仕方なく、↓を作って $foo.bar の代わりに _foo.bindings.bar みたいにしてます。 import SwiftUI extension Environment where Value: AnyObject { var bindings: Wrapper { .init(environment: self) } @dynamicMemberLookup struct Wrapper { fileprivate let environment: Environment<Value> subscript<T>(dynamicMember keyPath: ReferenceWritableKeyPath<Value, T>) -> Binding<T> { Binding( get: { environment.wrappedValue[keyPath: keyPath] }, set: { newValue in environment.wrappedValue[keyPath: keyPath] = newValue } ) } } }