使用MVVM时,如何在子ViewControllers中扩展ViewModel?

时间:2017-03-16 05:22:24

标签: ios swift mvvm

我有这种层次结构:

class OneViewModel {
}

class OneViewController {
  var viewModel = OneViewModel()
}

class TwoViewModel : OneViewModel {
}

class TwoViewController : OneViewController {
  var viewModel = TwoViewModel() // ???
}

我知道在Swift中不允许覆盖属性类型,但是对于子ViewController携带两个ViewModel没有意义,怎么会解决这个问题呢?谢谢!

2 个答案:

答案 0 :(得分:1)

这应该有效

class OneViewModel {
}

class OneViewController {
    var viewModel = OneViewModel()
}

class TwoViewModel : OneViewModel {
}

class TwoViewController : OneViewController {
    override init() {
        super.init()
        self.viewModel = TwoViewModel()
    }
}

您可以将viewModel实例设置为TwoViewModel课程。

答案 1 :(得分:1)

我用这个:

class OneViewController {
  var viewModel: OneViewModel {
    return storedViewModel
  }
  lazy var storedViewModel: OneViewModel = {
    type(of: self).viewModelProvider()
  }()
  class func viewModelProvider() -> OneViewModel {
    return OneViewModel()
  }
}

class TwoViewController {
  override var viewModel: TwoViewModel {
    return storedViewModel as! TwoViewModel
  }
  override class func viewModelProvider() -> OneViewModel {
    return TwoViewModel()
  }
}

设置有点冗长,但之后使用起来很简单明了。