将 PROTOCOL 的方法声明为 MUTATING
2015-11-02 21:10
211 查看
将 PROTOCOL 的方法声明为 MUTATING
由 王巍 (@ONEVCAT) 发布于 2014/08/17Swift 的 protocol 不仅可以被
class类型实现,也适用于
struct和
enum。因为这个原因,我们在写给别人用的接口时需要多考虑是否使用
mutating来修饰方法,比如定义为
mutating func myMethod()。Swift 的
mutating关键字修饰方法是为了能在该方法中修改 struct 或是 enum 的变量,所以如果你没在接口方法里写 mutating 的话,别人如果用
struct或者
enum来实现这个接口的话,就不能在方法里改变自己的变量了。比如下面的代码
protocol Vehicle { var numberOfWheels: Int {get} var color: UIColor {get set} mutating func changeColor() } struct MyCar: Vehicle { let numberOfWheels = 4 var color = UIColor.blueColor()! mutating func changeColor() { color = UIColor.redColor() } }
如果把 protocol 定义中的
mutating去掉的话,
MyCar就怎么都过不了编译了:保持现有代码不变的话,会报错说没有实现接口;如果去掉
mutating的话,会报错说不能改变结构体成员。这个接口的使用者的忧伤的眼神,相信你能想象得出。
另外,在使用
class来实现带有
mutating的方法的接口时,具体实现的前面是不需要加
mutating修饰的,因为
class可以随意更改自己的成员变量。所以说在接口里用
mutating修饰方法,对于
class的实现是完全透明,可以当作不存在的。
相关文章推荐
- 计算机是怎样启动起来的?
- java关键字共50+3个
- 内核启动流程分析之编译体验
- Java反射机制(1)
- LTE上行链路反馈MCS(计算MCS、调制阶数、编码速率、频谱效率关系表格)
- Asp.net使用powershell管理hyper-v
- ifconfig 修改IP
- Invert Binary Tree
- HDU-2795-Billboard
- mysql截取字符串
- Lesson 7 Matrix-matrix and matrix-vector multiplication
- 子进程和父进程的关系和示例
- iOS 心得九:应用缓存的查看和清除
- bit、byte、位、字节、汉字的关系
- OpenGL一些函数详解(二)
- WPF学习(一)--布局控件简介
- 玩转树莓派--图形界面登陆
- 个人之对于Block的初探究
- 使用ubuntu15.04手动搭建LNMP服务器框架
- poj 1006 暴搜