我正在Swift中构建一个应用程序,我有一个视图控制器,我将在2个地方使用它来显示非常相似的屏幕,但有一些细微的差别。
我有一个叫做myProtocol的协议,我有一个视图控制器,它有一个名为viewModel的属性,它遵守这个协议。 viewModel可以是aViewModel或bViewModel的实例,但它们都具有与协议相同的方法,但根据视图控制器的使用位置返回不同的值。
现在,在objective-c中,我可以做到
@property (nonatomic, strong) id <myProtocol>viewModel
然后可以将其设置为viewModel = [aViewmodel new]
或viewModel = [bViewmodel new]
。我怎样才能在swift中实现类似的东西?
我尝试将该属性添加为let viewModel: myProtocol? = nil
,但这是一个错误,说它无法推断出类型。如果你们能给我一些建议的话,就像wondinerg一样。我已经足够快,但已经使用Objective-c几年了
答案 0 :(得分:2)
假设您使用的是Swift 3:
protocol MyProtocol {
//...
}
var viewModel:MyProtocol?
class ViewModel: MyProtocol {
//...
}
viewModel = ViewModel()