IOS-笔记6(拓展,协议)
2015-08-18 17:27
323 查看
Extensions
使用这个可以给现存的类,结构体和枚举添加属性和方法,属性的话只能添加计算属性。现有的属性和方法不可以被复写。可以很简单的添加一些小方法,也可以用来构建整个软件的构架。
protocol
这是一个数据类型,但是他只有声明没有实现。实现由使用这个协议的类和枚举和结构体来实现。
协议可以继承。
在写协议的时候,声明属性时需要通过set,get来指定这个属性的可读和可写性。会改变接收者值的函数则需要加上mutating关键字。通过声明init方法还可以规定协议实现者实现规定的初始化方法,这时要注意在实现时(类)要加上required关键字。
这里声明一个协议:
一个实现它的结构体:
初始化两个实例:
使用这个可以给现存的类,结构体和枚举添加属性和方法,属性的话只能添加计算属性。现有的属性和方法不可以被复写。可以很简单的添加一些小方法,也可以用来构建整个软件的构架。
protocol
这是一个数据类型,但是他只有声明没有实现。实现由使用这个协议的类和枚举和结构体来实现。
协议可以继承。
在写协议的时候,声明属性时需要通过set,get来指定这个属性的可读和可写性。会改变接收者值的函数则需要加上mutating关键字。通过声明init方法还可以规定协议实现者实现规定的初始化方法,这时要注意在实现时(类)要加上required关键字。
这里声明一个协议:
protocol Moveable { mutating func moveTo(p: CGPoint) }一个实现它的类:
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)//这时这句话就会报错了
相关文章推荐
- IOS7、8模态半透明弹出框
- iOS拨打电话的三种方法
- IOS学习之oc基础
- iOS ble通信
- IOS:身份证格式验证
- IOS学习之Foundation框架—集合
- iOS项目开发实战——自定义圆形进度提示控件
- IOS学习之Foundation框架—字符串
- IOS学习之Foundation框架—结构体
- IOS开发—截屏
- iOS 项目的目录结构能看出你的开发经验
- iOS详细解析视图控制器的正向和逆向传值
- iOS iOS8注册通知
- 静态扫描-Godeyes for ios
- iOS开发问题——简单的验证码倒计时显示
- iOS-如何集成iOS9里的3D Touch
- iOS-如何将非ARC的项目转换成ARC项目
- IOS 数组去重及排序
- iOS开发- Xcode插件- 规范注释生成器VVDocumenter 自己的见解
- iOS结构体二进制NSData相互转换