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)

 

 

 

 

 

posted on 2019-07-09 19:33  二狗你变了  阅读(2510)  评论(0编辑  收藏  举报

导航