zoukankan      html  css  js  c++  java
  • 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)

     

     

     

     

     

  • 相关阅读:
    TCP/IP协议详解
    linux高性能服务器编程--初见
    聚合类
    类class 2
    继承
    构造函数再探
    静态成员与友元
    MySQL图形工具SQLyog破解版
    MySQL注释符号
    数据库中多对多关系的中间表的命名规则
  • 原文地址:https://www.cnblogs.com/dhui69/p/11159800.html
Copyright © 2011-2022 走看看