Swift 類的使用class


/*

類屬性的介紹

Swift中類的屬性有多種

1.存儲屬性:存儲示例的常量和變量

2.計算屬性:通過某種方式計算出來的屬性

3.類屬性:與整個類自身相關的屬性

 

 存儲屬性

 存儲屬性是最簡單的屬性,它作為類實例的一部分,用於存儲常量和變量

 可以給存儲屬性提供一個默認值,也可以在初始化方法中對其進行初始化

*/

 

class Student{

    

    //存儲屬性

    var name:String = ""

    var mathScore:Double=0.0

    var chineseScore:Double=0.0

    

    //計算屬性-->只讀屬性

    var averageScore:Double{

        return (chineseScore+mathScore)*0.5

    }

    

    //類屬性:和整個類相關的屬性,並且是通過類名進行訪問

    static var courseCount:Int=0

    

    //    //給類擴充函數

    //    func getAverageScore()->Double {

    //        return (chineseScore+mathScore)*0.5

    //    }

}

 

let stu=Student()

stu.name="jack"

stu.mathScore=80

stu.chineseScore=90

 

Student.courseCount=2

 

print(stu.averageScore)

 

 

/*

 監聽類屬性的改變

 */

class Person{

    var name:String = "aa" {

        //選擇其中之一即可

        

        //監聽屬性即將發生改變,還沒有改變

        willSet{

            print("屬性即將改變\(name)")

        }

        //監聽屬性已經發生改變,已經發生改變

        didSet{

            print("屬性發生改變\(name)")

        }

    }

    var age:Int = 0 {//選擇其中之一即可

        //監聽屬性即將發生改變,還沒有改變

        willSet(newAge2222){

            print(newAge2222)

            print("屬性即將改變\(age)")

        }

        //監聽屬性已經發生改變,已經發生改變

        didSet(oldAge1){

            print(oldAge1)

            print("屬性發生改變\(age)")

        }

    }

    

}

 

let p = Person()

p.name="jack"

p.age=100

 

/*

 類的構造函數

 */

class Person2{

    var name:String = ""

    var age:Int = 0

    

    init(dict:[String:Any]) {

        if let name = dict["name"] as? String {

            self.name=name

        }

        if let age = dict["age"] as? Int {

            self.age=age

        }

    }

}

 

let p2 = Person2(dict: ["name":"jack","age":18])

print(p2.name,p2.age)

 

/*

 使用KVC

 1.必須繼承自NSObject

 2.必須在構造函數中,先調用suepr.init()

 3.調用setValuesForKeys

 4.如果字典中某一個key沒有對應的屬性,則需要重寫setValue forUndefinedKey方法

 */

class Person3:NSObject{

    @objc var name:String = ""

    @objc var age:Int = 0

    

    // MARK:- 自定義構造函數

    override init() {

        

    }

    init(dict:[String:Any]) {

        super.init()

        setValuesForKeys(dict)

    }

    

    override func setValue(_ value: Any?, forUndefinedKey key: String) {

 

    }

    

//    override func setValue(_ value: Any?, forKey key: String) {

//        //print(key)

//    }

    

    //重寫析構函數,監聽對象的銷毀

    deinit{

        print("對象銷毀")

    }

 

}

 

let p3 = Person3(dict: ["name":"jack22","age":28,"phoneNum":"+86 110"])

print(p3.name,p3.age)

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM