Swift可選類型(nil和OC大不同)

原文地址

一開始對可選類型認識不足

這篇文章講的挺透徹

1.使用可選類型(opitionals)來處理值可能確實的情況,可選類型表示:

有值,等于x

沒有值

比如下面的一個列子:

let possibleNumber = “123”

let convertedNumber = possibleNumber.toInt

這個例子中常量possibleNumber有可能是一個不單單含有數字的字符串,如果統一轉成Int類型有可能會失敗,所以swift就產生了一個可選類型,即convertedNumber的類型是Int類的可選(有值就為x,對于convertedNumber沒有意義的值就為無值(nil),但是convertedNumber的實際類型還是只是Int類型的,不能是Bool、String等其他類型)。這樣就避免了類型轉換時候出現的錯誤。 所以可選類型是用來進行確定容錯判斷的一個新東西。

2.可選綁定

可選綁定是用來判斷可選類型是否包含值(所以說他是一個可以作為條件判斷的語句),如果包含就把值賦給一個臨時變量或者變量。可選綁定可以用if或者while語句中來對可選類型的值進行判斷并把值賦給一個常量或者變量。

例子:

if let actualNumber = possibleNumber.toInt(){

println("\(possibleNumber)has an integer value of \(actualNumbe)")

}else{

println("\(possibleNumber) could't be converted to an integer.")

}

這段代碼可以理解為:

如果possibleNumber.toInt()的返回可選包含一個值的話(即為一個Int值),則創建一個常量actualNumber并把這個值賦給它。

如果轉化成功,則常量actualNumber就可以在if語句的第一個分支里使用,由于它應經被可選類型的值初始化過,所以不用在用!后綴(可選類型取值要用!取值,直接使用還是optional類型的,而不是Int類型)獲取它的值。在這個例子中actualNumber指示被用來輸出轉化值的。

(如果自己確信可選值是有值的,后面接個!就可以解綁定)

3.關于nil

你可以為可選變量賦值為nil來表示它沒有值:

var serverResponseCode: Int? = 404

//serverResponseCode包含一個可選值404

serverResponseCode = nil

//serverResponseCode現在不包含任何值。

這里有一點可選值404來代表無此操作。

需要注意一點的是:nil不能用于非可選類型的變量和常量。也就是說nil只能用在可選類型的變量和常量。

如果你聲明了可選變量或常量,但是沒有賦值,它們會被自動賦值為nil。

另外需要注意的一點是:swift里的nil和OC里的nil并不一樣,OC里的nil是一個指向不存在對象的指針;但是在swift中,nil不是指針,它是一個確定的值,用來表示值缺失。任意類型的可選狀態的值缺失都可以賦值nil,并不只是對象類型可以賦值。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 這是16年5月份編輯的一份比較雜亂適合自己觀看的學習記錄文檔,今天18年5月份再次想寫文章,發現簡書還為我保存起的...
    Jenaral閱讀 2,860評論 2 9
  • 基本數據類型 整數整數就是沒有小數部分的數字,如 42 和 -23 。整數是有符號的(正、負、零)或無符號的(正、...
    Gary_Tseng閱讀 568評論 0 0
  • 前言 Swift是一門新的適用于iOS,macOS,watchOS,tvOS開發的編程語言。盡管如此,Swift的...
    BoomLee閱讀 1,793評論 0 4
  • Swift 是一門開發 iOS, macOS, watchOS 和 tvOS 應用的新語言。然而,如果你有 C 或...
    XLsn0w閱讀 934評論 2 1
  • SwiftDay011.MySwiftimport UIKitprintln("Hello Swift!")var...
    smile麗語閱讀 3,865評論 0 6