存儲屬性就是存儲在特定類、結構體裏的一個常量或者變量。 能夠在定義存儲屬性的時候指定默認值。 能夠在構造過程當中設置或者修改存儲屬性的值性能
class Person{ //儲存屬性 var name: String? var age: Int? } struct Model{ //儲存屬性 var p: Person? var index: Int } let p = Person() p.name = "Zoujie" p.age = 18 let model:Model = Model(p: p, index: 1)
開發中常常在加載屬性利用懶加載 尤爲在UI lazy var 變量 : 類型 = {建立變量代碼}()code
class MyView:UIView{ lazy var label = UILabel() lazy var tableView:UITableView = { () -> UITableView in let tb = UITableView(frame: CGRect(x: 0, y: 0, width: 300, height: 300), style: .plain) // tb.delegate = self; // tb.dataSource = self; return tb }() }
計算型屬性:不直接儲存值,而是經過提供一個getter方法來獲取值,而後用一個可選項的setter來間接設置其餘的屬性或者變量的值開發
class NewClass{ var firstName = "伊麗莎白" var lastName = "Rain" var fullName: String{ get{ return firstName+lastName } } } print(NewClass().fullName) //還能夠定義set方法 class Student{ var book = "iOS" var changeBook:String{ get{ return book } set(newBook){ book = newBook } } } let s = Student() print(s.changeBook) s.changeBook = "iOS Swift" print(s.changeBook)
計算型屬性可以幫助結構體修改屬性get
struct Animal{ var kind = "" var age = 0 //若是要用方法修改結構提屬性 須要使用mutating mutating func changeAnimalKind(newKind:String){ self.kind = newKind } //上面的方法等同下面的計算型屬性:說明計算型屬性是對方法的封裝 var changeKind:String{ get{ return self.kind } set(newKind){ self.kind = newKind } } } var ani = Animal(kind: "哺乳動物", age: 3) print(ani.kind) ani.changeAnimalKind(newKind: "兩棲動物") print(ani.kind) ani.changeKind = "魚類" print(ani.changeKind)
屬性觀察器:很是有意思的特性,能夠用來檢測屬性值的變化table
class example{ var age : Int = 10{ //即將賦值了就會來到這裏 willSet{ print("example方法 要修改 age了 newValue \(newValue)") } //賦值完畢了就來這裏 didSet{ print("example方法 賦值完畢 oldvalue == \(oldValue)") } } } let ex = example() print(ex.age) ex.age = 20 print(ex.age)
類型屬性:表明類的特性 一般用static修飾ast
class CarClass{ static var whole = 4 } //類型屬性不須要實例變量 直接經過類調用 print(CarClass.whole)