記錄一下Swift3.0的一些代碼格式的變化

一.去重:數組

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

相關文章
相關標籤/搜索