【发布时间】:2020-04-22 07:07:28
【问题描述】:
在协议中使用get set 时我很困惑。仅使用 get 可以正常工作,但 set 部分不行。
protocol MainViewModelProtocol {
var localDoor: LocalDoorCoreDataObject { get set }
}
extension MainViewModelProtocol {
var localDoor: LocalDoorCoreDataObject {
get { return MainViewModel.instance.localDoor }
set { localDoor = newValue }
}
}
final class MainViewModel: MainViewModelProtocol {
var localDoor: LocalDoorCoreDataObject = LocalDoorCoreDataObject()
...
然后当我在viewController使用它时
self.mainViewModel.localDoor = $0
但这给了我错误
无法分配给属性:“mainViewModel”是一个只能获取的属性
如何正确设置?
编辑
viewModel 的启动是通过 factory based dependency injection 完成的
protocol MainViewModelInjected {
var mainViewModel: MainViewModelProtocol { get }
}
extension MainViewModelInjected {
var mainViewModel: MainViewModelProtocol { return MainViewModel.instance }
}
【问题讨论】:
-
我更新了答案 :) 我也试过
MainViewModel.instance.localDoor = newValue但不能因为它是而且应该是let
标签: ios swift compiler-errors protocols