swift3.0 协议内方法声明为mutating
来源:互联网 发布:r编程入门经典 编辑:程序博客网 时间:2024/06/05 23:51
http://www.pdosgk.com/index.php/home/news/show/id/70159.html
将 protocol 的方法声明为 mutating
Swift 的 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.blue mutating func changeColor() { color = .red }}
如果把 protocol 定义中的 mutating 去掉的话,MyCar 就怎么都过不了编译了:保持现有代码不变的话,会报错说没有实现协议;如果去掉 mutating 的话,会报错说不能改变结构体成员。这个协议的使用者的忧伤的眼神,相信你能想象得出。
另外,在使用 class 来实现带有 mutating 的方法的协议时,具体实现的前面是不需要加 mutating 修饰的,因为 class 可以随意更改自己的成员变量。所以说在协议里用 mutating 修饰方法,对于 class 的实现是完全透明,可以当作不存在的。
class MyFerrari: Vehicle { let numberOfWheels = 4 var color = UIColor.red func changeColor() { color = .black }}
记住结论, 所有协议中的方法都用mutating修饰
0 0
- swift3.0 协议内方法声明为mutating
- 将 PROTOCOL 的方法声明为 MUTATING
- Swift3.0 mutating关键字
- swift3 基础语法(mutating)
- swift3.0 协议
- swift3.0中的代理协议
- swift3 协议
- swift3.0 如何写一个类集使用的类方法协议
- Swift3.0 -- get & set 方法
- Swift3.0 类方法示例
- Swift3.0 Cocoapods 安装方法
- Swift3.0中文教程:22.协议
- Swift3.0- 协议(protocol)
- Swift_方法func(在类、枚举、结构体中的声明和使用 mutating func初始化值可变)
- swift3.0 浮点数四舍五入为整数
- Swift3 苹果内购
- swift3 面向协议编程
- Swift3.0中文教程:11.方法
- 产品经理的第一本书
- Mariadb修改表前的准备工作
- 关于java web项目中WEB-INF目录下页面的访问问题
- 前端基础进阶
- 一、Redis基本操作——String(原理篇)
- swift3.0 协议内方法声明为mutating
- 前端攻击测试
- KD树 CQOI 2016 K 远点对
- python添加module问题解决no module named XXX
- 每天一个linux命令:telnet命令
- 微软,谷歌,甲骨文,拳头,面试题
- 自学Android历程->对Android应用APK包进行签名
- 二、Redis基本操作——String(实战篇)
- Exception in thread "main" java.lang.NoClassDefFoundError: com/sun/jersey/api/client/config/ClientCo