swift面向对象之属性
swift面向對象之屬性
swift屬性
存儲屬性
可以存儲常量和變量
惰性存儲屬性
語法:lazy var 變量
惰性存儲屬性只有在用的時候才會完成真正的初始化,剛開始的初始化代碼只是類型占位,并沒有分配存儲空間。
比如
class people{
var name:String
init(name:String){
self.name=name
}
}
class car{
lazy var carOwner=people(name:”shu”)
fun show(){
println(carOwner.name)
}
}
然后新建一個car實例,這時carOwner并沒有初始化,只有當car實例調用show方法時,才會給carOwner這個屬性分配存儲空間。
以下3種情況用到惰性存儲屬性
1.在構造屬性的時候無法知道屬性的外部信息,則使用惰性屬性(比如當你輸入框輸入時你才知道該把屬性賦值什么)
2.當屬性的值需要大量計算或者很復雜時,為了不阻塞對象初始化
3.必須把惰性存儲屬性設置成變量,因為屬性的值在實例完成構造前,無法得到
計算屬性
計算屬性有下面幾個特點
雖然是屬性,卻沒有實際的內存空間,在類的結構中不占存儲位置
提供了取值訪問器get和賦值訪問器set,負責獲取該屬性的值,或提供該屬性給其他的存儲屬性賦值
為swift類屬性增加了開閉規則
但凡計算屬性必須是變量類型var,因為計算屬性不確定
取值訪問器的標準格式
var 計算屬性:類型{
get{
return 值
?}
}
精簡形式
var? 計算屬性:類型{
return 值
}
對于賦值訪問器
var 計算屬性:類型{
set(newValue){
進行屬性賦值
}
}
精簡形式
var 計算屬性:類型{
set{}
}
只讀控制,即開閉規則的實現,對于某些屬性我們只允許訪問而不允許賦值,則稱這類屬性為只讀屬性。對外訪問開發,對內賦值關閉,這是編程原則里面很重要的開閉規則
var isHappy:Bool{
//取值訪問器
get{
if(dream!=“”&&(dream == realty)||lover!=nil||apperance=“帥到睡不著”)
return true
}else{
return false
}
}
類型屬性
類型屬性的格式為class var 屬性名:類型{get/set{}}
對于引用類型(類就屬于引用類型)必須使用計算屬性而不能使用存儲屬性
必須給類型屬性指定默認值,因為類型屬性不屬于實例范疇,不能使用任何一個實例是構造器賦值
類型屬性本質是計算屬性的范疇,與get/set訪問器的用法完全相同
下面一個例子
class People{
class var planet:String{
return “地球”
}
}
屬性觀察器
屬性觀察器不能用在惰性存儲屬性上,因為惰性存儲屬性是臨時產生的,所以無法觀察其有效期。
對于可以重寫的屬性,可以在子類中增加觀察器,但是對于非重寫的屬性則沒有必要,因為可以在賦值訪問器中觸發觀察的行為
類似于kvo模式
屬性觀察器可以用于全局變量和局部變量
willSet
willSet(willSetValue){
//willSetValue可以用戶自定義
}簡化格式為:willSet{
//必須使用newValue作為參數
}
didSet
didSet(oldSetValue){
//oldSetValue可以用戶自定義
}簡化格式為:didSet{
//必須使用oldValue作為參數
//}
總結
以上是生活随笔為你收集整理的swift面向对象之属性的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: trailmakers未能连接服务器,T
- 下一篇: Python数模笔记-NetworkX(