在 iOS 10 的 SDK 中,很多成員方法 (instance method) 都換成了成員變數 (instance variable, or stored property) 。
這樣在複寫父類別的方式就要改變了。
以 preferredStatusBarStyle
為例,在過去的寫法是這樣:
override func preferredStatusBarStyle() -> UIStatusBarStyle {
return .LightContent
}
但是這時候 Xcode 就會報錯,並抱怨說:
Method does not override any method from its superclass
意思是這個 method 已經從父類別移除。他也不是不見,而是以 property 的方式存在:
open var preferredStatusBarStyle: UIStatusBarStyle { get }
而不再以 method 的方式存在。
修改覆寫方式
這時候就要從覆寫方法,轉而覆寫一個成員變數:
override var preferredStatusBarStyle: UIStatusBarStyle {
return .lightContent
}
這樣即可。
小結
其實 Xcode 應該可以知道哪些覆寫的對象是從 方法
轉為 變數
,要是碰到這一類型的變更,能提供更好的錯誤訊息的話會更好。