一.去重:數組
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