Swift中的屬性分為兩種屬性死宣,一種就是計(jì)算型屬性 一種就是存儲(chǔ)型屬性伟恶,開(kāi)始我雖然知道這兩種屬性,但是了解并不深對(duì)于他的setter和getter方法毅该,所以還是按照OC的方式進(jìn)行寫(xiě)博秫,但是問(wèn)題就來(lái)了,立馬出現(xiàn)了crash眶掌〉灿看一下我沒(méi)有搞清楚之前的代碼
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
}
}
在我仔細(xì)閱讀了關(guān)于這部分的內(nèi)容,和理解之后我發(fā)現(xiàn)朴爬,這根本就是OC的思想即寒,在swift中這樣寫(xiě)是大錯(cuò)特錯(cuò)的。這就是基本的swift概念都沒(méi)弄明白召噩。(以上是這種寫(xiě)法母赵,會(huì)直接崩潰)
計(jì)算型屬性是什么
計(jì)算型屬性是通過(guò)計(jì)算而得出來(lái)的屬性,這種屬性相區(qū)別于存儲(chǔ)屬性這種屬性是不會(huì)存儲(chǔ)的蚣常。如果是計(jì)算型屬性市咽,那么提供setter方法那就一定需要提供getter方法,可以直接只有一個(gè)getter方法抵蚊,其實(shí)仔細(xì)想一想這樣的設(shè)計(jì)是有緣由的施绎,計(jì)算型屬性我們是為了得出什么?我們是為了獲取計(jì)算出來(lái)的值贞绳,那么你提供了setter方法谷醉,不提提供getter方法(他又不會(huì)存儲(chǔ))那么你是不能得到想要的值的,setter方法他會(huì)將新值保存在一個(gè)叫newValue中冈闭,我們可以直接用俱尼,當(dāng)然getter中也有一個(gè)newValue
存儲(chǔ)型屬性是什么
存儲(chǔ)型屬性就是一個(gè)需要存儲(chǔ)的屬性,如果我們需要自定義setter和getter方法萎攒,我們得注意一下遇八,setter方法存在兩種矛绘,willSet和didSet,這兩種方法我們不一定都需要實(shí)現(xiàn)刃永,根據(jù)需求實(shí)現(xiàn)各自的方法货矮,willSet是將要賦值的時(shí)候調(diào)用的,而didSet方法是已經(jīng)賦完了值之后調(diào)用的斯够∏裘担可以提供他的getter方法,和計(jì)算型屬性不一樣的是读规,他可以有setter方法沒(méi)有g(shù)etter抓督,想想設(shè)計(jì)也是相當(dāng)?shù)暮侠恚热凰谴鎯?chǔ)型的屬性束亏,已經(jīng)存起來(lái)了铃在,那么我們可以取得到。在willSet方法里沒(méi)有必要賦值枪汪,除非你要改變新賦的值涌穆,getter方法和setter 方法不能同時(shí)出現(xiàn)
關(guān)鍵字 final
final 關(guān)鍵字可以修飾類(lèi),結(jié)構(gòu)體等等雀久。他的含義是避免子類(lèi)繼承和修改