前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【Swift开发必备Tip】:将protocol 的方法声明为mutating

【Swift开发必备Tip】:将protocol 的方法声明为mutating

作者头像
博文视点Broadview
发布2020-06-11 10:49:14
3440
发布2020-06-11 10:49:14
举报

一年一度的WWDC,对全球苹果开发者而言,仿佛久旱甘露——之前充满躁动,过程酣畅淋漓,过后满目清新。一个个让人眼前一亮的热点中,最不容易被开发者遗漏的,莫过于苹果公司不负众望,宣布Swift 2.0版发布,同时更是劲爆地宣布Swift开源,引起现场及遍布全球一个个屏幕后最响亮的欢呼和掌声。从发布会Keynote上可以大概寻觅到一些Swift 2.0的新增特性,包括泛型、更快的调试模式、更快的编译、错误处理机制、C函数指针API、注释里Markdown格式等。尽管WWDC如火如荼,相信苹果开发者之中仍有为数不少尚未开始接触Swift。时不我待,在2.0发布之前抓紧感受一些Swift的轻盈与灵动吧!

为此畅销书《Swifter : 100 个 Swift 开发必备 Tip》的作者喵神王巍给出的建议是,尽快开始动手实践开发一些 App。给自己定一个目标,比如花上几天时间或者一周的时间用 Swift 做一个能上架的简单的App 之类的。与简单地写个 Demo 相比,实际做一个真正的 app 对能力的提升是完全不同的,后者需要更多的全局考虑和综合能力。不少问题只有在实践中才会遇到,才会被解决,而对应的能力也才能被提升。

下面,我们就通过其中一个Tip的实例和代码,开始迈向Swift之旅……

将protocol 的方法声明为mutating

Swift的protocol不仅可以被class 类型实现,也适用于struct 和enum。因为这个原因,我们在写接口给别人用时需要多考虑是否使用mutating 来修饰方法,比如定义为mutating func myMethod()。Swift 的mutating 关键字修饰方法是为了能在该方法中修改struct 或enum 的变量,所以如果你没在接口方法里写mutating 的话,别人如果用struct 或者enum来实现这个接口的话,就不能在方法里改变自己的变量了。比如下面的代码:

protocolVehicle 
{
  var numberOfWheels: Int {get}
  var color: UIColor {get set}
  mutating func changeColor()
}
structMyCar: Vehicle {
let numberOfWheels = 4
var color =UIColor.blueColor()
mutating func changeColor(){
color = UIColor.redColor()
}
}

如果把protocol 定义中的mutating 去掉的话,MyCar 就怎么都过不了编译了:保持现有代码不变的话,会报错说没有实现接口;如果去掉mutating的话,会报错说不能改变结构体成员。这个接口的使用者的忧伤的眼神,相信你能想象得出。

另外,在使用class 来实现带有mutating 的方法的接口时,具体实现的前面是不需要加mutating 修饰的,因为class 可以随意更改自己的成员变量。所以说在接口里用mutating修饰方法,对于class 的实现是完全透明,可以当作不存在的。

本文摘自《Swifter : 100 个 Swift 开发必备 Tip》

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2015-06-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 博文视点Broadview 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档