-
++ , -- 操作符更改成 += 1,-= 1;
for 循环 :
for(int i = 0 ; i < 100 ; i++){} 改成 for in:
for i in 1...100 {} 或者改成 for-each 循环(闭包)
(1...100).forEach { print( $0) }
2.Currying 移除柯里化函数:
func foo(x:Int)(y: Int)
3.移除变量参数:
func 中不再允许声明var 参数:
func 用参数变量(var i: Int)//不会改变调用者的变量, 只在函数中有效
如果一定要观察调用者变量的变化情况
func 用inout变量(inout i:Int)//会改变调用者的变量,可以观察
4.函数调用第一个参数必须加标签
之前,函数调用可以不加第一个参数标签
func foo(x:Int,y:Int)
foo(1,y:2)
Swift 3, 函数调用必须要加第一个参数的标签
func foo(x:Int, y:Int)
foo(x:1,y:2)
如果swift的代码是 3.0之前写的, 不想每个调用方法去添加缺少的参数, 可以吧方法的参数改成省略: fun foo(_ x:Int, y:Int) 调用方法可以使用 foo(1,y:2)
5.Selector, KeyPath 不再以String的形式出现
给一个Button实例增加一个单机方法:
aButton.addTarget(...,action:“tap”,…) 改写成:
aButton.addTarget(...,action:#selector(self.tap()),…)
获取一个Student类的变量girlFriendName:
aStudent.valueForKeyPath(“girlFriendName”)
aStudent.value (forKeyPath: #keyPath(Student.girlFriendName))
6.去掉NS前缀
去除NS前缀的类型
提升的类型,完整列表(https://github.com/apple/swift-evolution/blob/master/proposals/0086-drop-foundation-ns.md)
7.圆周率
MI_PI:原来使用
.pi: swift 3使用
Float.pi
Double.pi
CGFloat.pi
8.GCD
从C式的面向过程 到 Swift式的面向对象用法
let queue = dispatch_queue_create( "com.xxx.xxxx", nil)
dispatch_async(queue) {
print("Swift 2.2的GCD 队列")
}let queue = DispatchQueue(label: "com.xxx.xxxx") queue.async { print(“Swift 3 中的GCD队列") }
9.枚举成员首字母小写
.Add 到.add
.CGColor 到.cgColor
.TouchUpInside 到.touchUpInside
.FillStroke 到.fillStroke 等等
10.允许(大部分)关键字作为成员引用
enum UITableViewCellStyle : Int {
case `default`
case value1
case value2
case subtitle
}
let cell = UITableViewCell(style: .default
, reuseIdentifier: nil) swift 2.2
let cell = UITableViewCell(style: .default, reuseIdentifier: nil) swift 3
11.Swift调用OC API更Swift ①规则
let searchText= userInput.stringByTrimmingCharactersInSet( NSCharacterSet.whitespaceAndNewlineCharacterSet()) swift 2.2
let searchText= userInput.trimming (.whitespaceAndNewlines)
大致规则:
尽量简短的、更Swift式的枚举、方法名,在3个单词以内为佳。
去除类型名称中的重复单词(噪音)
增加默认参数
增加第一个参数标签
在布尔属性前加前缀is
非类型(值)声明一律小写
让类遵循Comparable协议
12.Swift方法的动词和名词
名词-返回一个特定的值
动词-执行一个特定的操作
var *array = [1, 5, 3, 2, 4]
let *sortedArray = array.sort()//动词 重新排序会改变 array
print(sortedArray)
var *array = [1, 5, 3, 2, 4]
let *sortedArray = array.sorted()//名词 重新排序不会改变array
print(sortedArray)
13.xcode改进
storyboard 无极缩放
size class不再抽象话, 而是具体的设备
签名改进