Avatar
private struct Item: Identifiable { let id: UUID = .init() var isOn: Bool = false } private struct ItemView: View { var item: Item @State private var localIsOn: Bool? private var isOnBinding: Binding<Bool> { .init( get: { localIsOn ?? item.isOn }, set: { localIsOn = $0 } ) } var body: some View { let _ = print("\(isOnBinding.wrappedValue)") Toggle("isOn", isOn: isOnBinding) } } struct ContentView: View { @State private var items: [Item] = (0..<200).map { _ in .init() } var body: some View { ScrollView { LazyVStack { ForEach(items) { item in ItemView(item: item) } } } } } スクロールの場合は、本来「ビューヒエラルキーから消した」わけではないはずなのに、メモリから消えたら @State 状態も消えるんだね… しかも一番厄介なのは、画面から消えても、メモリから消えたとは限らない 😇