一、類與結構體
兩者在Swift中差不了多少了
類與結構體有很多相同的地方: (第2,3點是其他語言中不存在的)
1)都可以定義屬性/方法/下標(結構體也可以定義方法了)
2)都能初始化(通過構造方法)
3)都能使用擴充(extension)與協議(protocol)
4)類與結構體(枚舉)中的全域屬性/方法:在類中用class關鍵字,但在結構體中用static
類比結構體多的功能:
1)能繼承
2)運行時能檢查類對象的類型
3)析構釋放資源
4)引用計數允許一個類執行個體有多個引用
[java] view plain copy class Person1{ var name = "jack" // class var height:Int = 10 //錯誤! 類中不能有全域儲存屬性的, 只能是計算屬性. 見下文說明 } struct Person2{ //結構體更像Java中的類 var age:Int // static var height:Int = 10 //可以設定全域屬性, 需要初始化. } //1.1執行個體化類與結構, 預設構造器 let p1 = Person1() let p2 = Person2(age: 10) //當使用預設構造器時, 必須初始化裡面所有的屬性
二、屬性(儲存屬性--計算屬性--類屬性)
2.1儲存屬性: 就是儲存一個常量或變數,類似Java中的成員變數 [java] view plain copy class Person3{ var name:String = "xuneng" //需要手動初始化 var age:Int = 10 let height = 175 lazy var p1:Person1 = Person1() //延遲, 必須是var } var p3 = Person3() p3.name //通過點文法來訪問 p3.age = 11 //設定 //延遲lazy儲存屬性: 當使用改屬性時才進行初始化, 好處是避免空間浪費 println(p3.p1) //這句調用時, p1才進行初始化
2.2計算屬性: 不直接儲存值,而是用get/set來做.可用來操作其他屬性值的變化
get: 取, 用來封裝取值的過程
set: 設, 用來封裝設值的過程
[java] view plain copy class Person4{ var name:String = "jack" var jjLength:Int = 10 var age:Int{ //只能是var get{ return jjLength * 2 } set(newAge){ jjLength = newAge / 2