一.去重:
1>顏色:
UIColor.whiteColor() 被改為 UIColor.white()
2>數組取值:
list.objectAtIndex(i) 被改為 list.object(at: i)
3>present:
presentViewController(controller, animated: true) 被改為 present(toViewController: controller, animated: true)
4> cell:
dequeueReusableCellWithIdentifier("Cell", forIndexPath:indexPath) 被改為 dequeueReusableCell(withIdentifier: "Cell", for: indexPath)
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)
三、命名
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()
四、方法的返回值處理
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)
五、可選類型
var str: String! = "a"
var s = str print(s)
六、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 這東西還是得經常用一下呢?
七、類庫
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