拥有可以是符合特定协议的任何对象的属性

时间:2017-05-05 11:32:56

标签: ios swift

我正在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几年了

1 个答案:

答案 0 :(得分:2)

假设您使用的是Swift 3:

protocol MyProtocol {
    //...
}

var viewModel:MyProtocol?

class ViewModel: MyProtocol {
    //...
}    

viewModel = ViewModel()