存储属性就是存储在特定类、结构体里的一个常量或者变量。 能够在定义存储属性的时候指定默认值。 能够在构造过程当中设置或者修改存储属性的值性能
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)