我们继续再来探讨 Swift 3 带来的改变,这次是关于 var 关键字的,函数的参数不能再使用 var 作为修饰关键字了。
还是回到 Swift 3 的提案主页上,会看到一个叫做 SE-0003 的提案,是苹果工程师 David Farler 发起的。这个提案的内容原文如下:
There has been some confusion of semantics when a function parameter is marked as inout compared to var. Both give a mutable local copy of a value but parameters marked inout are automatically written back.
简单来说,对于函数参数,var 和 inout 修饰方法会产生很多语义上的混淆。虽然这两者都可以让这个参数变成可修改的。但只有 inout 方式才能让这个参数修改后真正的写回原始地址中。咱们来看一个例子就明白啦:
|
这里我们定义了一个 handle 函数,在这个函数中修改了他的参数 x。 定义好之后,我们来调用它:
|
你会发现,虽然 handle 函数内部对参数进行了重新赋值,但我们调用后, param 变量的值还是 1。
我们再来看另外一种定义方式:
|
这次 handle 函数的定义几乎和我们之前的一样,唯一的不同就是参数前面的 var 换成了 inout,然后我们再调用这个函数:
|
这次 param 输出的结果就是 2 了。
可见这两个关键字在函数参数的定义上面,确实容易造成混淆。 所以在 Swift 3 之后, var 定义参数的方式就被取消了。 如果现在你使用的是 Swift 2.2 编译器,使用 var 关键字就会产生一个编译警告。而等到了 Swift 3 正式发布之后,就会直接产生编译错误了。
所以如果大家的 Swift 项目中有过这样的引用,那么现在就应该注意修改了。
本站文章均为原创内容,如需转载请注明出处,谢谢。如果想读更多精彩内容,请关注微信公众号 swift-cafe,第一时间推送给您