【发布时间】:2015-12-26 01:57:57
【问题描述】:
我想用不同类型覆盖一个类的属性。我已经使用以下代码与UISearchController 一起工作:
class SearchController: UISearchController {
lazy private var _searchBar: SearchBar = { return SearchBar() }()
override var searchBar: SearchBar { return _searchBar }
}
class SearchBar: UISearchBar {}
使用该代码,我可以覆盖 UISearchBar 属性并将其设为我的自定义 SearchBar。但是,使用类似的代码尝试通过协议进行此操作将无法编译。
protocol SplitViewDelegate: UISplitViewControllerDelegate {}
class SplitViewController: UISplitViewController {
var _delegate: SplitViewDelegate?
override var delegate: SplitViewDelegate? { return _delegate }
}
我知道我要覆盖的委托需要一个 getter 和一个 setter,但如果我提供一个,问题是一样的。我的问题很简洁。
我也知道有很多解决方法,比如让 setter 进行类型检查,或者使用不同的属性名称。这纯粹是为了理解。
我的问题是:为什么我可以用不同的类 (SearchController) 覆盖类类型属性,而不是协议 (SplitViewController)?
【问题讨论】:
标签: ios swift overriding