Xcode
iOS
Swift

Override, from method to stored property - Swift 3 調整記

More than 1 year has passed since last update.

在 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 應該可以知道哪些覆寫的對象是從 方法 轉為 變數 ,要是碰到這一類型的變更,能提供更好的錯誤訊息的話會更好。