我正在浏览 MVVM 模式的this好教程,以一个简单的api调用为例。以下是 Storyboard 中UIViewController
的最终结构:
VC:
import UIKit
class ViewController: UIViewController {
@IBOutlet weak var viewModel: ViewModel!
override func viewDidLoad() {
super.viewDidLoad()
}
}
VM:
import UIKit
class ViewModel: NSObject {
@IBOutlet weak var client: ApiClient!
}
ApiClient:
import UIKit
class ApiClient: NSObject {
}
观察:
在整个过程中,我了解到 ViewModel (考虑MVVM),应该永远不会有UIKit
引用。尽管对MVVM使用 Storyboards 证明有不同的结果。我们正在 ViewModel 中使用IBOutlet
。
查询:
对 MVVM 使用 Storyboard 和对象IBOutlet
是否正确?
答案 0 :(得分:1)
提到:
我已经了解到ViewModel(考虑MVVM)应该永远不会有 UIKit参考。
似乎并不总是正确的,在创建视图模型时它不是标准的经验法则,因此如果只需要将属性声明为UIKit
,则需要导入IBOutlet
,它将是不错。
我认为提及视图永远不应导入UIKit
的目的是因为我们想要一个精确的视图模型,这意味着我们不想破坏原则MVVM模式通过让视图模型 - 无意中 - 负责“视图”层的职责,通过避免在视图模型中导入UIKit
,我们可以保证不会发生这种冲突;毫无疑问,你 - 作为一名开发人员 - 能够认识到这种冲突......
尽管如此,您仍然可以通过将import UIKit
声明为:
client
var client: ApiClient!
没有将其标记为IBOutlet
,因此您需要以编程方式注入它,而不是通过故事板进行注释。