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)