一.去重:数组
1>颜色:bash
UIColor.whiteColor() 被改成 UIColor.white()ide
2>数组取值:函数
list.objectAtIndex(i) 被改成 list.object(at: i)ui
3>present:atom
presentViewController(controller, animated: true) 被改成 present(toViewController: controller, animated: true)spa
4> cell:code
dequeueReusableCellWithIdentifier("Cell", forIndexPath:indexPath) 被改成 dequeueReusableCell(withIdentifier: "Cell", for: indexPath)orm
5>tableView对象
func numberOfSectionsInTableView(tableView: UITableView) -> Int 被改成 func numberOfSections(in tableView: UITableView) -> Int
二.参数
override func viewWillAppear(animated: Bool) 被改成 override func viewWillAppear(_ animated: Bool) 下面再看一个实例的调用例子,加深印象: func myFunc(x: Int, y: Int) 这个函数在调用时必须使用如下代码 myFunc(x: 1, y: 2) 如果容许匿名参数,则修改之: func myFunc(_ x: Int, _ y: Int) 这个函数在调用时容许不带参数名称 myFunc(1, 2)
3、命名
1>对齐方式:
lbl.textAlignment = NSTextAlignment.Center
被改成
lbl.textAlignment = NSTextAlignment.center
2>CGRect:
tableFooterView = UIView(frame: CGRectZero) 被改成 tableFooterView = UIView(frame: CGRect.zero)
3>CGRectZero:
CGRectZero改成CGRect.zero
4>hidden:
lbl.hidden = false 被改成 lbl.isHidden = false
5>Bundle:
let bundle = NSBundle.mainBundle() 被改成 let bundle = Bundle.main()
6>FileManager:
let mgr = NSFileManager.defaultManager() 被改成 let mgr = FileManager.default()
4、方法的返回值处理
1>咱们在开发中可能会常常调用一些带有返回值的方法,可是却不处理返回值,例如如下这种:
navigationController!.popViewControllerAnimated(true)
这个方法实际上返回一个 UIViewController,可是不多有人会用,更多的场景是把它当成无返回的方法来使用。可是在 Swift 3 中,这样作是不行的,你必须处理掉这个返回值,以下:
let _ = navigationController!.popViewController(animated: true)
使用单个下划线来指代一个不会被使用的变量。
2>Swift 3 再也不容许传入传出的对象,以前带有 var 的方法声明将所有做废:
func myFunc(var a: Int) -> Int 如以上这种声明,已不可再使用,对于有多个值要返回的方法,必须改成: fun myFunc(a: Int) -> (Int, Int)
5、可选类型
var str: String! = "a"
var s = str print(s)
6、Selector
Swift 3 对可选类型的处理更严格了,必须显式的在任何地方使用感叹号,例如咱们有如下代码:
self.performSelector(onMainThread: #selector(handle(ret:)), with: ret, waitUntilDone: true) 就以 Swift 3 下的这个函数为基准吧,老版本的Selector获取方法是这样的: #selector(ViewController.handle(_:)) // 2.2 #selector(ViewController.handle(:)) // 2.1 #selector(handle) // 2.0 @selector("handle:") // 1.x x等于几已经不记得了 "handle:" // 没记错的话是 1.0 时代,直接传个字符串就是 Selector N/A // Swift 的历史上,还真有过没有 Selector 的版本
回到 Swift 3 上来,目前的 Selector 写法如最上面那种,须要注意的是,Selector 的方法名和参数名必须与实际被调用的方法彻底一致,不然编译时就会报错。 <用2.0的写法貌似也是能够调用的!!!>
另外,Selector 传参时,只能传递对象,不能传基础数据类型,传基础数据类型的状况下,一概变成0(但愿这只是当前版本的 bug,否则太蛋疼了)。虽然说苹果已经把大部分的 NS 类都去掉了前缀,可是 NSNumber 这东西仍是得常常用一下呢?
7、类库
1>协议的可选
@objc protocol MyProtocol: NSObjectProtocol { optional func foo(myClass: MyClass?) optional func bar(myClass: MyClass?) } 须要改成 @objc protocol MyProtocol: NSObjectProtocol { @objc optional func foo(myClass: MyClass?) @objc optional func bar(myClass: MyClass?) }
2>图形图象库:
let imgData = UIImageJPEGRepresentation(img, 1) let imgPath = "\(FileUtils.getDocumentPath())/\(name)" imgData!.writeToFile(imgPath, atomically: true) 必须改成 let imgData = UIImageJPEGRepresentation(img, 1) let imgPath = "\(FileUtils.getDocumentPath()!)/\(name!)" NSData(data: imgData!).write(toFile: imgPath, atomically: true)
参考连接: http://gold.xitu.io/entry/576bd4595bbb500059463426