一、前奏
Swift作為一門新語言,經過幾年的發展,逐漸趨於完善,目前已經更新到3.0版本,它匯集許多其他語言的特點,例如JS、Paython、C++等,完全區別於OC。個人感覺它沒有完全的OOP和OOD的性質。
二、談談幾種屬性的區別
存儲屬性
定義:實實在在存儲常量和變量的
計算屬性
定義:依賴於存儲屬性,通過計算得出來,它提供getter訪問值,提供setter方法間接給其他屬性或者變量設置值
類屬性
定義:其本質其實就是一個全局屬性,在類里限定了其作用域,用關鍵字static(用於結構體和枚舉中)或者class(用於類中)修飾
懶加載屬性
定義:該屬性在使用的時候初始化一次,用關鍵字lazy修飾,必須進行初始化,非實例屬性懶加載時在大括號{}后面要加上()
全局屬性
定義:類外面的屬性,作用域全局。類似於OC的static修飾的屬性
class ViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() //實例屬性 let p = Person()
//存儲屬性 print(p.age)
//懶加載屬性 print(p.name)
//類屬性 print(Person.height)
//計算屬性 print(p.getAge)
//全局屬性 print(commonProperty) } } //全局屬性 var commonProperty = {()->String in print("Common Property1") return "Common Property" }()
//類型屬性,此處struct也可以是enum枚舉
struct AnyStructure{
static var storedTypeProperty = "Some value"
static var computedTypeProperty:Int{
return 100
}
} class Person{ //類屬性 class var height = {()->Int in print("Static Properties") return 170 }() //存儲屬性 var age = {()->Int in print("Store properties") return 26 }() //計算屬性 var getAge:Int{ get{ print("Computed Properties") return age } } //懶加載屬性 lazy var name = {()->String in print("Lazy Properties") return "Lazy liyang" }() //構造方法 init(){ print("init") } }
三、總結:基於類,類的構造
- 存儲屬性,最先被初始化
- 構造方法,僅次於存儲屬性調用,可以在這里對存儲屬性進行賦值
- 懶加載屬性、類屬性、全局屬性都是在第一次使用的時候初始化一次,以后調用都不在初始化
- warning:當懶加載屬性是基於一個存儲屬性計算的時候,切勿使用懶加載屬性,采用計算屬性