美文网首页
日常随笔第十弹-类/协议/拓展

日常随笔第十弹-类/协议/拓展

作者: 没有北方的南方 | 来源:发表于2016-07-24 21:01 被阅读14次

    1. 成员与类的权限

    • 权限:internal/pravite/public
    • 默认为internal:在当前应用或模块可见
    • pravite: 在当前文件中使用
    • public: 在其他地方都可见
    • 成员的权限不能超过类的权限

    2. 类的封装

    class hummen {//封装
        var name : String = ""
        var age : UInt = 0
        private var weight : Double = 0
        var height : Double = 0
    }
    
    
    var p3 = people()
    p3.name = "李雪"
    print(p3.name)
    
    var p4 = p3
    p4.height = 34
    print(p4.height, p4.name)
    
    class tangle {//可定义存储属性,也可定义计算属性
        var height : Double = 0
        var weight : Double = 0
        var name : String!{
        willSet(value){//储存属性
                print("将\(name)设置为:(value)")
            }
        didSet{
                print("已经设置为:\(name)")
            }
        }
        var area:Double{//计算属性
            set{
                height = sqrt(newValue)
                weight = sqrt(newValue)
            }
            get {
                return height * weight
            }
            //return height * weight
        }
        func same()  {
            print("this is the same")
        }
    }
    
    var t1 = tangle()
    t1.height = 24
    t1.weight = 5
    
    t1.name = "张三"
    
    print(t1.area)
    

    3. 类的继承

    • swift中类的继承是单继承,只有一个父类,也可以没有父类
    • 可继承父类中所有的成员和方法
    • 也可以重新构造父类的方法
    class rectangle: tangle {//继承tangle
        var width : Double = 0
        func diffrent() {
            print("this is diffrent")
        }
        override func same() {//重新构造父类的方法,需添加关键字override
            print("this the same")
        }
    }
    var re1 = rectangle()
    re1.diffrent()
    re1.same()
    
    var re2 : tangle//声明为tangle类
    re2 = rectangle()//re2实际为rectangle类,但是还是tangle类
    var re3 = re2 as! rectangle//将re2强制转换为rectangle类
    re2.same()
    re3.diffrent()
    

    4. 类的协议与扩展

    4.1 协议的作用

    • 将不同父类的类通过一些描述特征将其归为一类进行管理

    协议的定义

    protocol extra {
        func condition()
    }
    

    协议的实现

    class Clothes : extra{
        func condition() {
            print("Cloth is dry~")
        }
    }
    

    4.2 扩展的作用

    • 将已有的类型进行添加功能或是方法,也可以添加类的功能
    • 不能创建存储属性,只能创建计算属性
    
    //也可以给类添加功能,“类型”没有局限
    extension Int{//给已有类型添加功能,扩展Int类型中的某些功能,包括方法
        //var i = 123//不能创建存储属性,只能是计算属性
        var i : Int{
            return self * 2
        }
        func InfoPrint(number : Int, number1 :Int) -> Int {
            return number * self + number1
        }
    }
    var s = 123
    print(s.i, s.InfoPrint(3, number1: 4))
    extension Clothes {
        func condition() {
            print("Cloth is dry~")
        }
    }
    

    5. 计算符重载

    • 重新定义计算符,使其能在特定的函数中实现符号的功能
    func 符号()->类型{}
    

    相关文章

      网友评论

          本文标题:日常随笔第十弹-类/协议/拓展

          本文链接:https://www.haomeiwen.com/subject/qihgjttx.html