09--swift之屬性

1.屬性簡介swift

在類,結構體,枚舉中都用屬性,屬性將值跟特定的類,結構體,枚舉關聯閉包

。存儲屬性存儲變量或者常量做爲實例的一部分,而計算屬性計算一個值。函數

計算屬性能夠用於類,結構體,枚舉,而存儲屬性只能用於類和結構體spa

,不能用於枚舉。屬性能夠分爲實例屬性和類屬性。orm


2.存儲屬性繼承


struct Point {ci

var x: Int = 1get

var y: Int = 3it

let someValue: Int = 4class

3.常量結構體的存儲屬性


struct Point {

var x: Int

var y: Int

}

let r = Point(x: 3, y: 5)

r.x = 6

r.y = 7//會報錯,由於r爲常量結構體,即便x,y是變量屬性也不能修改


4.延遲存儲屬性

當第一次被調用的時候纔會計算其初始值的屬性。在屬性聲明前使用lazy來標示一個延遲存儲屬性

class a {

init(){

print("init a..")


}

func f1(){

print("f1")

}

}

class b{

lazy var r: a = a()//加上lazy後就不實例化a了,只有調用時才實例化

init(){

print("init b")


}

}

var c = b()

5.計算屬性

計算屬性能夠在類,結構體,枚舉中定義。計算屬性不直接存儲值,而是提供一個gettersetter來間接獲取和設置其餘屬性或者變量的值。

struct Rect {

var w:Double!

var h: Double!

var circle: Double{

get {

return (w+h)*2

}

set{

w = newValue/4

h = newValue/4

print("newvalue=\(newValue)")

}

}

}

var r = Rect(w: 20, h: 40)

print(r.circle)

print(r.h)

print(r.w)

r.circle = 200

print(r.h)

print(r.circle)//circle就是計算屬性

6.便捷setter,計算屬性中setter可選。

7.只讀計算屬性,只有getter沒有setter的計算屬性。

只讀計算屬性老是返回一個值,能夠經過點運算符訪問,但不能設置新的值。

8.屬性觀察器

注意:屬性觀察器監控和響應屬性值的變化,每次屬性被設置值的時候都會調用屬性觀察器,甚至新的值和如今的值相同的時候也不例外。還能夠爲除了延遲存儲屬性以外的其餘存儲屬性添加屬性觀察器,也能夠經過重載屬性的方式爲繼承的屬性添加屬性觀察器。觀察器有willSet:在新的值被設置以前調用和didSet:在新的值被設置以後當即調用

class Animal {

var age:Int = 1{

willSet(newValue){

print("newValue=\(newValue)")

if newValue<=0{

print("false")

}

}

didSet{

print("did set")

}

}

}

var a = Animal()

a.age = 1

a.age = -2


9.全局變量,局部變量

計算屬性和屬性觀察器所描述的模式也能夠用於全局和局部,全局變量是在函數,方法,閉包,任意類型以外定義的變量,局部變量是在內部定義的變量。

10.類型屬性和實例屬性

值類型的存儲型類型屬性能夠是常量或者變量,計算型類型屬性跟實例的計算屬性同樣只能定義成變量屬性

oc不一樣,在swift中,類型屬性是做爲類型定義的一部分寫在類型最外層的括號內,所以它的做用範圍也就在類型支持的範圍內。

使用關鍵字static來定義類型屬性。在爲類(class)定義計算類型屬性時,可使用關鍵字class來支持子類對父類的實現進行重寫

相關文章
相關標籤/搜索