我想覆蓋具有不同類型的類的屬性。我已經得到了這個與UISearchController
工作用下面的代碼:使用不同類型重寫Swift var
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)?