Swift3废除特性(二)

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

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

varage = 22

add(age)

funcadd(varage:Int) {

age += 1

}

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

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

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

letnumber = additive(8, b: 12)

funcadditive(a:Int, b:Int) -> Int{

returna + b

}

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

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

letnumber = additive(8, b: 12)

funcadditive(_ a:Int, b:Int) -> Int{

returna + b

}

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

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

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

funcg(a: Int -> Int) -> Int->Int { ... }

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

funcg(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)

你可能感兴趣的:(Swift3废除特性(二))