门外汉自学Swift

20170619基础知识-协议

2017-06-19  本文已影响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

上一篇下一篇

猜你喜欢

热点阅读