11.属性

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

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)
相关文章
相关标签/搜索