그래서 나는 여러 가지 가능성이 있다고 생각합니다. 다음은 거의 비슷한 상황을 관리하는 방법입니다. 귀하의 생각에 도움이되기를 바랍니다.
먼저 내 Viewmodels 용 프로토콜을 만듭니다. 예 :
protocol Child1ViewProtocol {
func getFirstName() -> String
}
protocol Child2ViewProtocol {
func getLastName() -> String
}
protocol MainViewProtocol {
func getChildModel1() -> Child1ViewProtocol
func getChildModel2() -> Child2ViewProtocol
func getLanguage() -> String
func saveButtonPressed()
}
그런 다음 ViewModel 클래스를 만듭니다. 여기 아주 쉽게, 아이위한 것입니다 : 내가 그들에 액세스 할 수 있도록 기능이 saveButtonPressed은 당신이 당신의 MainViewModel를 만들 때 의미
class MainViewModel: MainViewProtocol {
var user: User?
var child1ViewModel: Child1ViewProtocol!
var child2ViewModel: Child2ViewProtocol!
init(child1ViewModel: Child1ViewProtocol,
child2ViewModel: Child2ViewProtocol) {
self.child1ViewModel = child1ViewModel
self.child2ViewModel = child2ViewModel
}
func getChildModel1() -> Child1ViewProtocol {
return self.child1ViewModel
}
func getChildModel2() -> Child2ViewProtocol {
return self.child2ViewModel
}
func getLanguage() -> String {
return self.user?.language ?? ""
}
func saveButtonPressed() {
self.user?.firstName = self.child1ViewModel.getFirstName()
self.user?.lastName = self.child2ViewModel.getLastName()
// And save the user for example
}
}
를 호출 할 때 자식 모델을 유지
class Child1ViewModel: Child1ViewProtocol {
var firstName: String?
init(firstName: String?) {
self.firstName = firstName
}
func getFirstName() -> String {
return self.firstName ?? ""
}
}
class Child2ViewModel: Child2ViewProtocol {
var lastName: String?
init(lastName: String?) {
self.lastName = lastName
}
func getLastName() -> String {
return self.lastName ?? ""
}
}
그리고 내 MainViewModel 코디네이터에서 childViewModels도 만들고 MainViewModel에 삽입해야합니다. 즉,보기에서 childViewModels에 대한 강력한 참조가 필요하지 않다는 의미입니다.