Swift3废除特性(二)

来源:互联网 发布:相处久了不爱了 知乎 编辑:程序博客网 时间:2024/05/05 13:52
    

3. 移除函数参数的 var 标记

 Swift 函数中,参数默认是常量。过去可以在参数前加关键字 var 将其定义为变量,这样函数内部就可以对该参数进行修改(外部的参数任然不会被修改)。

var age = 22

add(age)

 

func add(var age:Int) {

    age += 1

}

现在这种做法已经被废弃,Swift 3 不再允许开发者这样来将参数标记为变量了。

4所有函数参数都必须带上标签

过去如果一个函数有多个参数,调用的时候第一个参数无需带标签,而从第二个参数开始,必须要带标签。

let number = additive(8, b: 12)

 

func additive(a:Int, b:Int) -> Int{

    return a + b

}

现在为了确保函数参数标签的一致性,所有参数都必须带上标签。

这个变化可能会造成我们的项目代码要进行较大的改动,毕竟涉及的地方很多。所以苹果又给出了一种不用给第一个参数带标签的解决方案。即在第一个参数前面加上一个下划线。

let number = additive(8, b: 12)

 

func additive(_ a:Int, b:Int) -> Int{

    return a + b

}

这个只是方便我们代码从 Swift2 迁移到 Swift3 的一个折中方案,可以的话还是建议将所有的参数都带上标签。

5函数声明和函数调用都需要括号来包括参数

我们可以使用函数类型作为参数 ,对于一个参数是函数、返回值也是函数的函数。原来我们可能会这么写:

func g(a: Int -> Int) -> Int->Int { ... }

当这样非常难以阅读,很难看出参数在哪里结束,返回值又从哪里开始。在 Swift 3 中变成这么定义这个函数:

func g(a:(Int) -> Int) -> (Int) -> Int { ... }

6. Selector 不再允许使用 String

假设我们给按钮添加一个点击事件响应,点击后执行 tapped 函数。以前可以这么写:

button.addTarget(responder, action: "tapped", forControlEvents: .TouchUpInside)

但由于按钮的 selector 写的是字符串。如果字符串拼写错了,那程序会在运行时因找不到相关方法而崩溃。所以 Swift 3 将这种写法废除,改成 #selecor()。这样就将允许编译器提前检查方法名的拼写问题,而不用再等到运行时才发现问题。

button.addTarget(self, action:#selector(tapped), for:.touchUpInside)

 

0 0