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)
相關文章
相關標籤/搜索