IOS-笔记6(拓展,协议)
来源:互联网 发布:新三板最新数据 编辑:程序博客网 时间:2024/06/08 09:04
Extensions
使用这个可以给现存的类,结构体和枚举添加属性和方法,属性的话只能添加计算属性。现有的属性和方法不可以被复写。可以很简单的添加一些小方法,也可以用来构建整个软件的构架。
protocol
这是一个数据类型,但是他只有声明没有实现。实现由使用这个协议的类和枚举和结构体来实现。
协议可以继承。
在写协议的时候,声明属性时需要通过set,get来指定这个属性的可读和可写性。会改变接收者值的函数则需要加上mutating关键字。通过声明init方法还可以规定协议实现者实现规定的初始化方法,这时要注意在实现时(类)要加上required关键字。
这里声明一个协议:
protocol Moveable { mutating func moveTo(p: CGPoint)}
在声明一个协议时,使用Self来作为变量的类型,在实现时就可以在这里使用实现这个协议的类型
但要注意这时实现要使用范型
protocol Ordered { func precedes(other: Self) -> Bool}原来这样实现时就不行了
func binarySearch(sortedKeys: [Ordered], forKey k: Ordered) -> Int {...}得这样实现
func binarySearch<span style="color:#ff0000;"><T : Ordered></span>(sortedKeys: [<span style="color:#ff0000;">T</span>], forKey k: T) -> Int {...}
一个实现它的类:
class Car : Moveable { func moveTo(p: CGPoint) {.....}//这里并不需要加mutauing func changeOil()}
一个实现它的结构体:
struct Shape : Moveable { mutating func moveTo(p: CGPoint) {....} func draw()}
初始化两个实例:
let prius: Car = Car()let square: Shape = Shape()
var thingToMove: Moveable = prius//一个协议类型的变量,可以被一个实现了这个协议的实例赋值thingToMove.moveTo(...)//可以调用实例对象中实现的协议的方法thingToMove.changeOil()//这个方法则调用不了,即使这个类里确实有这个方法我还可以这样定义一个数组:
let thingsToMove: [Moveable] = [prius, square]//虽然他们一个是类一个是结构体还可以将协议用做参数:
func slide(slider: Moveable) { .......}slide(prius)slide(square)当参数需要满足多个协议时:
func slideAndSlide(x: protocol<Slippery, Moveable>)slideAndSlide(prius)//这时这句话就会报错了
0 0
- IOS-笔记6(拓展,协议)
- swift学习笔记之拓展和协议
- 拓展KMP详解+(笔记)
- 黑马程序员_学习笔记17_Http协议拓展
- 疯狂XML学习笔记(6)-----------XML拓展
- MQTT协议及拓展
- MQTT协议及拓展
- iOS多线程编程指南(拓展篇)
- ES6学习笔记(字符串拓展)
- iOS 笔记六: 协议 Protocols
- 黑马程序员--IOS学习笔记(协议和代理)
- 黑马程序员-IOS学习笔记(八)分类与协议
- IOS 笔记大全 (UI控件到网络协议)
- iOS开发拓展篇—音频处理(音乐播放器6)
- iOS开发拓展篇—音频处理(音乐播放器6)
- iOS开发拓展篇—音频处理(音乐播放器6)
- iOS开发拓展篇—音频处理(音乐播放器6)
- iOS--textfield的拓展
- Linux顶层目录下的Makefile作用解析
- 服务器高并发
- Linux下rpm方式安装mysql(密码修改,远程登录)
- ScheduledExecutorService定时周期执行指定的任务
- openCV—Python(11)——图像边缘检测
- IOS-笔记6(拓展,协议)
- OC NSFileManager
- 2014阿里前端笔试题(关于弹性盒布局的实现)
- hdu2841(容斥原理)
- Unsupported major.minor version 51.0解决
- Java Web 防范 SQL 注入攻击
- WebView使用方法
- shallow heap例说
- HTML DOM