首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

swift底层探索 04-利用sil解读关键字mutating,inoutswift底层探索 04-利用sil解读关键字mutating,inout

1. mutating ? 这种情况下想要修改一下self内部的值,就难办了。因为引用类型可以修改self中的其他变量,而值类型不可以。而这种需求是一定存在的。 ? 解决---根据编译器提示 ?...在方法前加一个mutating,可是这样做编译器到底做了什么?还是使用sil来查看。sil如何获取和使用 sil文件 ?...【总结】 因为方法的一个参数self是默认编译器自带的,我们是没法进行修饰的.利用mutating + func a()语句使编译器将第一个默认参数self改为var mutating修饰方法,而inout...解决---模仿mutating的处理 ? 解决方法就是在参数类型前加上inout,并且实现了不可变-值类型的交换。 sil文件 ?...有了mutating的过渡这部分就很好理解了吧~ 【总结】 inout相当于取地址,可以理解为地址传递,即引用 mutating修饰方法,而inout 修饰参数

52520

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

因为这个原因,我们在写接口给别人用时需要多考虑是否使用mutating 来修饰方法,比如定义为mutating func myMethod()。...Swift 的mutating 关键字修饰方法是为了能在该方法中修改struct 或enum 的变量,所以如果你没在接口方法里写mutating 的话,别人如果用struct 或者enum来实现这个接口的话...,会报错说没有实现接口;如果去掉mutating的话,会报错说不能改变结构体成员。...另外,在使用class 来实现带有mutating 的方法的接口时,具体实现的前面是不需要加mutating 修饰的,因为class 可以随意更改自己的成员变量。...所以说在接口里用mutating修饰方法,对于class 的实现是完全透明,可以当作不存在的。 本文摘自《Swifter : 100 个 Swift 开发必备 Tip》

34710

Swift 2开发必备小Tip

因为这个原因,我们在写接口给别人用时需要多考虑是否使用mutating 来修饰方法,比如定义为mutatingfunc myMethod()。...Swift 的mutating 关键字修饰方法是为了能在该方法中修改struct 或enum 的变量,所以如果你没在接口方法里写mutating,别人如果用struct 或者enum 来实现这个接口,就不能在方法里改变自己的变量了...比如下面的代码: 如果把protocol 定义中的mutating 去掉的话,MyCar 就怎么都过不了编译了:保持现有代码不变的话,会报错说没有实现接口;如果去掉mutating 的话,会报错说不能改变结构体成员...另外,在使用class 来实现带有mutating 的方法的接口时,具体实现的前面是不需要加mutating 修饰的,因为class 可以随意更改自己的成员变量。...所以说在接口里用mutating修饰方法,对于class 的实现是完全透明,可以当作不存在的。

37130

20.Swift学习之协议

// 方法 } 协议中的属性 不可以有默认值 必须设置是{get}或者{get set} ,注意:get与set之间是没有逗号的 必须设置为var 协议中的方法 可以定义普通方法也可以是mutating...var name: String {get set} var age: String {get} // 定义方法 func feed(food: String) mutating...可以直接声明为var类型就可以 协议中属性为可读属性,可以直接声明为let类型就可以,也可以声明为var类型 实现协议中的方法 可以为方法中的参数设置默认值 在结构体中,如果需要改变自身的值,需要在方法前面加mutating...在协议的方法中添加mutating关键字,如果结构体来遵守协议,需要有mutating这个关键字,如果是类来遵守协议,mutating关键字就不需要了。

30320
领券