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)

     

     

     

     

     

  • 相关阅读:
    XmlDocument 操作 xml
    流模型 操作 xml
    对DataTable进行分组
    xml文件,xml格式字符串 读写
    Jquery中的checkbox 及radio的问题
    简单爬虫获取网页图片
    页面JS实现按钮点击增加输入框
    Log4j配置文件解读和模板页收藏
    JS异步传递数组Action接受的实现与疑惑
    博客园美化手记——CSS Javascript Html
  • 原文地址:https://www.cnblogs.com/dhui69/p/11159800.html
Copyright © 2011-2022 走看看