はじめに
Viewに渡された@BindingプロパティをViewModelで使用する場合、ViewModelのイニシャライザでBindingを受け取る必要がある
コード
View.swift
import SwiftUI
struct Item_Image_Select_V: View {
@StateObject private var viewModel: ViewModel
@Binding var data: String
init(data: Binding<String>) {
self._data = data
self._viewModel = StateObject(wrappedValue: ViewModel(data: data))
}
// hogehoge...
}
ViewModel.swift
import SwiftUI
extension Item_Image_Select_V {
@MainActor class ViewModel: ObservableObject {
@Published var dataVM = ""
private var dataBinding: Binding<String>?
init(data: Binding<String>) {
self._dataVM = Published(initialValue: data.wrappedValue)
self.dataBinding = data
}
func something() {
// dataVMを処理し、自身のViewに反映。また、同様にdataBindingも更新し、親Viewに反映
// つまり、2つのプロパティを更新する必要がある
}
}
}