Swift學習筆記 屬性

2021-07-04 19:09:42 字數 3862 閱讀 9613

定義乙個屬性

struct fixedlengthrange

// fixedlengthrange這個類裡面有兩個屬性,乙個為 firstvalue:int 為可變型別,另外乙個為 length 為不可變型別

// 屬性賦值

var rangeofthreeitems = fixedlengthrange(firstvalue: 0, length: 3) // println:

rangeofthreeitems.firstvalue = 6

// println:

= 10 // 這裡是錯誤的,length在建立例項的時候被賦值,因為它是乙個常量儲存屬性,所以之後無法修改它的

// 結構體無論是 let 還是 var 都是可以修改為 var 的屬性

let rangeoffourtems = fixedlengthrange(firstvalue: 0, length: 3)

// println :

rangeofthreeitems.firstvalue = 6

// println :

延遲屬性

// 延遲儲存屬性是指當第一次呼叫的時候才會計算其初始值的屬性。在屬性宣告前使用 lazy 來標記乙個延遲儲存屬性

class

dataimporter

class

datamanager

var manager = datamanager()

// datamanager也可能不從檔案中匯入資料。所以當datamanager的例項被建立時,沒必要建立乙個dataimporter的例項,更明智的是當用到dataimporter的時候才去建立它。

// 那麼這個時候就要用到 lazy 了,由於使用了 lazy,importer 屬性只有再第一次被訪問的時候才會被建立。比如它的屬性 filename

println(manager.importer.filename)

// dataimporter 例項的 importer 屬性現在被建立了

get 和 set 方法

// 如果設定了屬性的 set 方法,那麼屬性必須也要設定  get 方法 ,但是只有 get 方法的時候可不設定 set 方法,這個時候這個屬性為唯讀屬性

// 以下這個例項是乙個檢視中的rect,rect 具有原點origin,大小size,和中點

center

struct point

struct size

struct rect

set}

}var square = rect(origin: point(x: 0.0, y: 0.0), size: size(width: 10.0, height: 10.0)) // println: , }

println("\(square.center.x)") // println: 5.0

let initialsquarecenter = square.center //第一次呼叫 get 方法

// println:

square.center = point(x: 15.0, y: 15.0) // 第一次呼叫 set 方法

// println: , }

println("\(square.center.x)") // println: "15.0"

唯讀計算屬性

// 只有 getter 沒有 setter 的計算屬性就是唯讀計算屬性。唯讀計算屬性總是返回乙個值,可以通過點運算子訪問,但不能設定新的值。

struct cuboid

}}let fourbyfivebytwo = cuboid(width: 4.0, height: 5.0, depth: 8.0)

= 160 // 只有 get 方法沒有 set 方法的屬性為 readonly 屬性,不能更改這個屬性的值,例子中的volume不能更改它的值

println("\(fourbyfivebytwo.volume)") // println : 160

// kvc 值變換觀察

// 以下這個例項是走路的例項,totalsteps 為總共走了多少步

class stepcounter

didset}}

}// willset和didset觀察器在屬性初始化過程中不會被呼叫,它們只會當屬性的值在初始化之外的地方被設定時被呼叫。

// willset在設定新的值之前呼叫

// didset在新的值被設定之後立即呼叫

let stepcounter = stepcounter()

stepcounter.totalsteps = 200

// 先呼叫 willset 後再呼叫 didset

//println:

stepcounter.totalsteps = 360

// println :

stepcounter.totalsteps = 896

// println:

型別屬性

// 在 swift 程式語言中,型別屬性是作為型別定義的一部分寫在型別最外層的花括號內,因此它的作用範圍也就在型別支援的範圍內。

// 使用關鍵字static來定義值型別的型別屬性,關鍵字class來為類(class)定義型別屬性。下面的例子演示了儲存型和計算型型別屬性的語法:

struct somestructure

}enum someenumeration

}class

someclass

}// 例子中的計算型型別屬性是唯讀的,但也可以定義可讀可寫的計算型型別屬性,跟例項計算屬性的語法類似。

// 跟例項屬性一樣,型別屬性的訪問也是通過點運算子來進行,但是型別屬性是通過型別本身來獲取設定的,而不是通過例項

println(someclass.computedtypeporperty)

println(somestructure.storedtypeproperty)

somestructure.storedtypeproperty = "another value."

println(somestructure.storedtypeproperty)

// 以下例項是模仿音訊中的左右聲道,聲道最大值為10,最少值為0,currentvalue為當前值,可變

struct audiochannel

if currentvalue > audiochannel.minvalue}}

}var leftchannel = audiochannel() // currentvalue = 0

var rightchannel = audiochannel() // currentvalue = 0

// 當 currentvalue 為7的時候,audiochannel.minvalue的值也為7

leftchannel.currentvalue =7

println(leftchannel.currentvalue) // println: 7

println(audiochannel.minvalue) // println: 7

// 當 currentvalue 為13的時候,超過了10,預設為 audiochannel.maxvalue的值,即為10

rightchannel.currentvalue =13

println(rightchannel.currentvalue) // println: 10

println(audiochannel.minvalue) // println: 10

Swift學習筆記 屬性

屬性分為儲存屬性與計算屬性,儲存屬性可以有預設值,計算屬性則根據已有資訊返回某種計算結果。類,結構體,列舉都可以有屬性 不使用 獲取值的屬性都是基本儲存屬性,包括讀寫屬性 var 宣告 以及唯讀屬性 let宣告 和巢狀函式一樣,型別也可以巢狀 class person 顏色 var color co...

Swift學習筆記 屬性

swift中屬性是描述特定類 結構或者列舉的值,可以分為以下幾種 1.儲存屬性 stored properties 2.計算屬性 computed properties 3.型別屬性 type properties 儲存屬性 儲存屬性就是例項物件的該屬性不需要自己額外實現方法,直接簡單明瞭 訪問原始...

Swift學習筆記 八 屬性

儲存屬性 儲存常量或變數作為例項的一部分 計算屬性計算 而不是儲存 乙個值。計算屬性 可以用於類 結構體和列舉裡 儲存屬性只能用於類和結構體.儲存屬性 簡單來說,乙個儲存屬性就是儲存在特定類或結構體的例項裡的乙個常量或變數,儲存屬性可以是變數儲存屬性 用關鍵字 var定義 也可以是常量儲存屬性 用關...