ViewModel调用ViewController方法MVVM模式,而不创建委托Swift
我使用的是MVVM设计模式,当currentStatus属性更新时,我想调用SettingsViewController方法 有没有一种方法可以在不创建委托或其他更好的方法的情况下实现 设置模式swiftViewModel调用ViewController方法MVVM模式,而不创建委托Swift,swift,Swift,我使用的是MVVM设计模式,当currentStatus属性更新时,我想调用SettingsViewController方法 有没有一种方法可以在不创建委托或其他更好的方法的情况下实现 设置模式swift var currentStatus: String? { get { return UserDefaults.standard.string(forKey: KeyValuePair.selectedStatus) } set { UserDef
var currentStatus: String? {
get {
return UserDefaults.standard.string(forKey: KeyValuePair.selectedStatus)
}
set {
UserDefaults.standard.set(newValue, forKey: KeyValuePair.selectedStatus)
updateStatus()
}
}
var settingVM : SettingsModel
func updateStatus () {
}
class Box<T> {
typealias Listener = T -> Void
var listener: Listener?
var value: T {
didSet {
listener?(value)
}
}
init(_ value: T) {
self.value = value
}
func bind(listener: Listener?) {
self.listener = listener
listener?(value)
}
}
var yourPickerValue: Box<String?> = Box(nil)
private var yourUptatedValue: String
private var settingVM : SettingsModel()
settingVM.yourPickerValue.bind { [unowned self] in // or [weak self]
self.yourUpdatedValue = $0
UserDefaults.standard.string($0, forKey: KeyValuePair.selectedStatus)
}
设置模型视图控制器.swift
var currentStatus: String? {
get {
return UserDefaults.standard.string(forKey: KeyValuePair.selectedStatus)
}
set {
UserDefaults.standard.set(newValue, forKey: KeyValuePair.selectedStatus)
updateStatus()
}
}
var settingVM : SettingsModel
func updateStatus () {
}
class Box<T> {
typealias Listener = T -> Void
var listener: Listener?
var value: T {
didSet {
listener?(value)
}
}
init(_ value: T) {
self.value = value
}
func bind(listener: Listener?) {
self.listener = listener
listener?(value)
}
}
var yourPickerValue: Box<String?> = Box(nil)
private var yourUptatedValue: String
private var settingVM : SettingsModel()
settingVM.yourPickerValue.bind { [unowned self] in // or [weak self]
self.yourUpdatedValue = $0
UserDefaults.standard.string($0, forKey: KeyValuePair.selectedStatus)
}
如果您不想在MVVM设计模式中使用协议,我认为创建一个Box类并使用泛型会很好 比如说, Box.swift
var currentStatus: String? {
get {
return UserDefaults.standard.string(forKey: KeyValuePair.selectedStatus)
}
set {
UserDefaults.standard.set(newValue, forKey: KeyValuePair.selectedStatus)
updateStatus()
}
}
var settingVM : SettingsModel
func updateStatus () {
}
class Box<T> {
typealias Listener = T -> Void
var listener: Listener?
var value: T {
didSet {
listener?(value)
}
}
init(_ value: T) {
self.value = value
}
func bind(listener: Listener?) {
self.listener = listener
listener?(value)
}
}
var yourPickerValue: Box<String?> = Box(nil)
private var yourUptatedValue: String
private var settingVM : SettingsModel()
settingVM.yourPickerValue.bind { [unowned self] in // or [weak self]
self.yourUpdatedValue = $0
UserDefaults.standard.string($0, forKey: KeyValuePair.selectedStatus)
}
如果您不想在MVVM设计模式中使用协议,我认为创建一个Box类并使用泛型会很好 比如说, Box.swift
var currentStatus: String? {
get {
return UserDefaults.standard.string(forKey: KeyValuePair.selectedStatus)
}
set {
UserDefaults.standard.set(newValue, forKey: KeyValuePair.selectedStatus)
updateStatus()
}
}
var settingVM : SettingsModel
func updateStatus () {
}
class Box<T> {
typealias Listener = T -> Void
var listener: Listener?
var value: T {
didSet {
listener?(value)
}
}
init(_ value: T) {
self.value = value
}
func bind(listener: Listener?) {
self.listener = listener
listener?(value)
}
}
var yourPickerValue: Box<String?> = Box(nil)
private var yourUptatedValue: String
private var settingVM : SettingsModel()
settingVM.yourPickerValue.bind { [unowned self] in // or [weak self]
self.yourUpdatedValue = $0
UserDefaults.standard.string($0, forKey: KeyValuePair.selectedStatus)
}
我的想法是通过通知而不是回调来处理它,视图控制器监听状态更改。这可能取决于当前状态“set”来自何处。您能举个例子吗
currentStatus
来自SettingsViewController中的picker,我的诱惑是通过通知而不是回调来处理它,视图控制器监听状态更改。这可能取决于当前状态“set”来自何处。您能举个例子吗<代码>当前状态来自设置视图控制器中的选择器