【发布时间】:2018-10-15 18:37:50
【问题描述】:
我有 3 个类:MyProfileVC、NewProfileVC 和 NewProfileViewModel。 为了使我的测试编写更容易,我决定在我的最后两个类中创建初始化器,如下所示:
NewProfileViewController:
var user: Users
var viewModel: NewProfileViewModel
init(for user: Users, with coreDataStack: CoreDataStack) {
self.user = user
self.viewModel = NewProfileViewModel(for: user, with: coreDataStack)
super.init(nibName: nil, bundle: nil)
}
NewProfileViewModel 有自己的 init:
var user: Users
var coreDataStack: CoreDataStack
init(for user: Users, with coreDataStack: CoreDataStack) {
self.user = user
self.coreDataStack = coreDataStack
}
最后我尝试将它们都初始化为来自MyProfileViewController 的链:
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "toNewProfile" {
var viewController = segue.destination as! NewProfileViewController
viewController = NewProfileViewController(for: sender as? Users ?? Users(context: coreDataStack.mainContext), with: coreDataStack)
}
}
所以这将初始化我的NewProfileVC,而NewProfileVC 将初始化NewProfileViewModel。
但是我想问一下经验比我高的开发人员,以我刚刚所做的那样在prepare: for segue 中初始化VC 是否是一种好习惯,或者您可以给我更好的想法?
我不想编写简单有效的代码,而是想构建一个好的架构,我没有任何导师可以问他,所以唯一的地方是 Stack,我希望你能帮助我。
提前致谢!
【问题讨论】:
-
不要使用
init,使用configure(for:with:)或类似的东西。因为segue.destination as! NewProfileViewController应该已经是一个“init”(应该调用 initWithCoder:),因为它在 Storyboard 中。
标签: ios swift unit-testing mvvm architecture