故事板 - 作为IBOutlet的对象内的对象

时间:2018-04-25 06:25:27

标签: ios swift mvvm storyboard iboutlet

我正在浏览 MVVM 模式的this好教程,以一个简单的api调用为例。以下是 Storyboard UIViewController的最终结构:

enter image description here

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是否正确?

1 个答案:

答案 0 :(得分:1)

提到:

  

我已经了解到ViewModel(考虑MVVM)应该永远不会有   UIKit参考。

似乎并不总是正确的,在创建视图模型时它不是标准的经验法则,因此如果只需要将属性声明为UIKit,则需要导入IBOutlet,它将是不错。

我认为提及视图永远不应导入UIKit的目的是因为我们想要一个精确的视图模型,这意味着我们不想破坏原则MVVM模式通过让视图模型 - 无意中 - 负责“视图”层的职责,通过避免在视图模型中导入UIKit,我们可以保证不会发生这种冲突;毫无疑问,你 - 作为一名开发人员 - 能够认识到这种冲突......

尽管如此,您仍然可以通过将import UIKit声明为:

从视图模型中移除client
var client: ApiClient!

没有将其标记为IBOutlet,因此您需要以编程方式注入它,而不是通过故事板进行注释。

相关问题