Swift 之属性setter、getter方法
Swift 之屬性setter、getter方法
Swift中的屬性分為兩種屬性,一種就是計算型屬性一種就是存儲型屬性,開始我雖然知道這兩種屬性,但是了解并不深對于他的setter和getter方法,所以還是按照OC的方式進行寫,但是問題就來了,立馬出現了crash。看一下我沒有搞清楚之前的代碼
var model:SearchLocation?{
set {
if newValue == nil {
self.textLabel?.text = "清除歷史搜索"
self.textLabel?.font = UIFont.systemFont(ofSize: 16)
self.textLabel?.textAlignment = NSTextAlignment.center
self.nameLabel.text = ""
self.descLabel.text = ""
self.textLabel?.textColor = UIColor.red
} else {
self.textLabel?.text = ""
self.nameLabel.text = newValue?.name
if newValue?.city==nil||(newValue?.city?.isEmpty)! || newValue?.district==nil || (newValue?.district?.isEmpty)! {
self.descLabel.text = ""
} else {
self.descLabel.text = (newValue?.city!)!+(model?.district!)!
}
model = newValue
}
}
get {
return model
}
}
在我仔細閱讀了關于這部分的內容,和理解之后我發現,這根本就是OC的思想,在swift中這樣寫是大錯特錯的。這就是基本的swift概念都沒弄明白。(以上是這種寫法,會直接崩潰)
計算型屬性是什么
計算型屬性是通過計算而得出來的屬性,這種屬性相區別于存儲屬性這種屬性是不會存儲的。如果是計算型屬性,那么提供setter方法那就一定需要提供getter方法,可以直接只有一個getter方法,其實仔細想一想這樣的設計是有緣由的,計算型屬性我們是為了得出什么?我們是為了獲取計算出來的值,那么你提供了setter方法,不提提供getter方法(他又不會存儲)那么你是不能得到想要的值的,setter方法他會將新值保存在一個叫newValue中,我們可以直接用,當然getter中也有一個newValue
存儲型屬性是什么
存儲型屬性就是一個需要存儲的屬性,如果我們需要自定義setter和getter方法,我們得注意一下,setter方法存在兩種,willSet和didSet,這兩種方法我們不一定都需要實現,根據需求實現各自的方法,willSet是將要賦值的時候調用的,而didSet方法是已經賦完了值之后調用的。可以提供他的getter方法,和計算型屬性不一樣的是,他可以有setter方法沒有getter,想想設計也是相當的合理,既然他是存儲型的屬性,已經存起來了,那么我們可以取得到。在willSet方法里沒有必要賦值,除非你要改變新賦的值,getter方法和setter 方法不能同時出現
關鍵字 final
final 關鍵字可以修飾類,結構體等等。他的含義是避免子類繼承和修改
總結
以上是生活随笔為你收集整理的Swift 之属性setter、getter方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: cus.crm.myaccounts.u
- 下一篇: SAP Fiori footer的重写方