美文网首页门外汉自学Swift
20170619基础知识-协议

20170619基础知识-协议

作者: 花间提壶蛋大厨 | 来源:发表于2017-06-19 21:57 被阅读0次

    1、协议,抽象类,java中的接口,只规定方法名、参数列表、返回值,不给出具体的实现。

    类、结构体、枚举,都可以声明遵从一个或多个协议,并提供该协议所要求的属性和方法的具体实现。

    2、定义协议

    protocol 协议名 {

    //协议内容

    }

    3、遵从协议

    类型(类、结构体、枚举) 类型名 :父类, 协议1,协议2 {

    //遵从协议内容

    }

    如果一个类继承父类的同时,也遵从协议,父类必须放在最前面

    4、协议可以要求遵从这,提供实例属性、静态属性、实例方法、静态方法

    4.1 实例方法

    protocolFigure {

    funconDraw()

    }

    classRectangle :Figure{

    funconDraw() {

    print("绘制矩形...")

    }

    }

    letrect1 =Rectangle()

    rect1.onDraw()

    4.2静态方法

    方法前加ststic,结构体、枚举要用static,类要用class或static,class可以被子类继承

    protocolAccount {

    staticfuncinterestBy(amount:Double) ->Double

    }

    classClassImp :Account{

    classfuncinterestBy(amount:Double) ->Double{

    return0.0668* amount

    }

    }

    4.3可变方法

    由于结构体、枚举不能修改属性,需要用mutating来定义可变方法

    5、协议属性,无论是存储属性还是计算属性,只要满足协议就可以

    5.1协议实例属性

    protocolPerson {

    varfirstName :String{getset}可读写

    varlastName :String{getset}

    varfullName :String{get}只读

    }

    5.2协议静态属性

    属性前面加static,结构体、枚举要用static,类要用class或static

    6、面向协议编程

    能够是面向对象类型的定义与实现分离,协议作为数据类型暴露给使用者,使其不关系具体的实现细节,从而提供代码的可扩展性和可复用性

    协议类型:协议可以出现在任意允许其他数据类型出现的地方

    作为函数、方法、构造函数中的参数类型、返回值类型

    作为常量、变量、属性的类型

    作为数组、字典、Set的元素类型

    协议作为类型使用,不仅可以用as、as?、as!进行类型转换,还能用is判断是否遵从了某个协议

    7、协议的继承:一个协议可以集成若干个协议,并可以在继承基础上增加新需求,可以多重继承,class不能多重继承

    协议的扩展:协议扩展,本质上还是协议,增加了一些方法和属性

    协议的组合:协议1 & 协议2... 临时的类型,要求参数同事遵从协议1和协议2

    扩展中遵从协议:struct A  extension A :协议1

    相关文章

      网友评论

        本文标题:20170619基础知识-协议

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