突变方法要求
能在方法
或函数
内部改变实例类型的方法称为突变方法
。在值类型(Value Type)
(译者注:特指结构体和枚举)中的的函数
前缀加上mutating
关键字来表示该函数允许改变该实例和其属性的类型。 这一变换过程在实例方法(Instance Methods)章节中有详细描述。
(译者注:类中的成员为引用类型(Reference Type)
,可以方便的修改实例及其属性的值而无需改变类型;而结构体
和枚举
中的成员均为值类型(Value Type)
,修改变量的值就相当于修改变量的类型,而Swift
默认不允许修改类型,因此需要前置mutating
关键字用来表示该函数
中能够修改类型)
注意: 用
class
实现协议中的mutating
方法时,不用写mutating
关键字;用结构体
,枚举
实现协议中的mutating
方法时,必须写mutating
关键字。
如下所示,Togglable
协议含有toggle
函数。根据函数名称推测,toggle
可能用于切换或恢复某个属性的状态。mutating
关键字表示它为突变方法
:
protocol Togglable {
mutating func toggle()
}
当使用枚举
或结构体
来实现Togglabl
协议时,必须在toggle
方法前加上mutating
关键字。
如下所示,OnOffSwitch
枚举遵循
了Togglable
协议,On
,Off
两个成员用于表示当前状态
enum OnOffSwitch: Togglable {
case Off, On
mutating func toggle() {
switch self {
case Off:
self = On
case On:
self = Off
}
}
}
var lightSwitch = OnOffSwitch.Off
lightSwitch.toggle()
//lightSwitch 现在的值为 .On
易百教程移动端:请扫描本页面底部(右侧)二维码并关注微信公众号,回复:"教程" 选择相关教程阅读或直接访问:http://m.yiibai.com 。
加QQ群啦,易百教程官方技术学习群
注意:建议每个人选自己的技术方向加群,同一个QQ最多限加 3 个群。
- Java技术群: 227270512 (人数:2000,免费:否)
- Go开发者群(新): 851549018 (人数:1000,免费)
- PHP开发者群: 460153241 (人数:2000,免费)
- MySQL/SQL群: 418407075 (人数:2000,免费:否)
- 大数据开发群: 655154550 (人数:2000,免费:否)
- Python技术群: 287904175 (人数:2000,免费:否)
- 人工智能深度学习: 456236082 (人数:2000,免费:否)
- 测试工程师群: 415553199 (人数:2000,免费:否)
- 前端开发者群: 410430016 (人数:2000,免费:否)
- C/C++技术群(新): 629264796 (人数:2000,免费)
- Node.js技术群(新): 621549808 (人数:2000,免费)
- PostgreSQL数据库群: 539504187 (人数:1000,免费)
- Linux运维技术群: 479429477 (人数:2000,免费:否)
- Oracle数据库: 175248146 (人数:2000,免费:否)
- C#/ASP.Net开发者: 579821706 (人数:2000,免费)
- 数据分析师群: 397883996 (人数:2000,免费:否)