美文网首页
swift协议基础

swift协议基础

作者: 天蚕 | 来源:发表于2017-02-21 10:48 被阅读96次

    swift协议定义方法(不能有默认参数)和属性(不能是let常量且必须表明读取属性)列表。一个类或者结构体遵守协议,就必须申明协议中规定的属性(这里的属性只需要与协议中规定的属性同名同类型即可,不需要有相同的读取属性),实现协议中规定的方法。
    1、swift中的继承是单一的,也就是说一个类只能继承一个类,所以swift语法要求如果一个类要继承,又要遵守协议,那么书写方式应该是这样的class 类名:要继承的父类,...要遵守的协议列表
    2、协议中也可以定义构造函数,如果一个类遵守的协议和继承的父类都需要实现同一个方法,那么就需要同时使用requiredoverride
    3、协议中的如果需要对属性的类型别名typealiasassociatedtype是同一个意思,类型别名,只不过苹果为了区别要求类型别名关键字typealiasassociatedtype替换,属于协议专用的,表明遵守协议的类型,必须定义一个同名的类型别名,而在协议实现时定义这个类型别名还是使用typealias关键字,associatedtype只会出现在协议中

    ///class和struct都能实现的协议
    ///mutating用于修饰结构题的方法,表明方法可以修改结构体自身,对于class是没有意义的。对于可能修改自身的方法就需要考虑用mutating修饰
    protocol Animal
    {
        //类型别名
        associatedtype AnimalType;
        //可读可写的属性
        var name:String {get set}
        //只读的属性
        var age:Int {get}
        
        func eat();
        mutating func changeName();
    }
    
    ///只有class实现的协议
    protocol Plant
    {
         //类型别名
         associatedtype PlantType;
        //可读可写的属性
        var name:String {get set}
        //只读的属性
        var age:Int {get}
        
        func eat();
    }
    

    4、协议的扩展extension可以为协议提供默认实现
    在协议的扩展中,我们可以直接为协议方法提供默认实现,为协议中的属性(计算型属性)添加默认实现,同样可以给协议添加方法和计算属性,并提供默认实现;在扩展中添加的方法和属性,必须提供默认实现。如果遵守协议的类或者结构体没有实现协议规定的方法,那么直接使用扩展中的默认方法实现

    相关文章

      网友评论

          本文标题:swift协议基础

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