標籤:swift swift基礎
Optionals 選配
選配(好像不是這麼翻譯的)適用於那些值可能為空白的情況,一個選配有兩種情況:存在值並且等於x,或者值不存在。
選配的概念在OC和C裡面並沒有,在OC中最接近的概念就是:OC中的返回值為對象的函數,當對象不存在的時候,可以返回nil,但是nil只能代表對象,不可以代表基礎類型或者結構體和枚舉類型。OC中使用NSNotFound表示值不存在。在Swift中,不需要使用其他的類型表示不存在的值。
舉個例子:
在Swift中,String類型有一個方法叫做toInt,但是並不是所有的String都可以轉換成Int的。
let possibleNumber = "123"let convertedNumber = possibleNumber.toInt()// convertedNumber is inferred to be of type "Int?", or "optional Int
因為toInt可能會失敗,它會返回一個可選的Int類型(寫作 Int?)而不是Int類型,表示這個返回值可以是一個Int類型的值,也有可能沒有值。
If Statements and Forced Unwrapping if條件陳述式和強制解析
你可以使用IF條件陳述式判斷一個選配裡面有沒有值,一旦你確定了選配中含有值,你可以在選配的名稱後面加上一個驚嘆號(!),表示我知道這個選配裡面含有值,這個過程被稱為選配值的強制解析。
if convertedNumber { println("\(possibleNumber) has an integer value of \(convertedNumber!)")} else { println("\(possibleNumber) could not be converted to an integer")}// prints "123 has an integer value of 123
在使用!之前,一定要保證配選值裡面儲存著真的值,不為空白。
Optional Binding 可選綁定
你可以使用可選綁定判斷一個可選值裡面是否有值,如果有值,可以將這個值作為常量或者變數,可以使用if或者while語句進行判斷和賦值。
可以重寫上面的強制解析,使用可選綁定進行判斷一個選配值是否為空白:
if let actualNumber = possibleNumber.toInt() { println("\(possibleNumber) has an integer value of \(actualNumber)")} else { println("\(possibleNumber) could not be converted to an integer")}// prints "123 has an integer value of 123"
上述過程可以理解為:
如果possibleNumber.toInt獲得的選配整型包含值,那就定義一個常量actualNumber用來儲存這個值。
如果轉換成功,actualNumber在if的第一個條件中可用,它已經被初始化包含可選值,不需要使用!來訪問它的值。
在可選綁定的過程中,你可以使用變數也可以使用常量。
nil 空值
var serverResponseCode: Int? = 404// serverResponseCode contains an actual Int value of 404serverResponseCode = nil// serverResponseCode now contains no value
如果定義常量和變數的時候沒有進行賦值,那麼預設的值就是nil
var surveyAnswer: String?// surveyAnswer is automatically set to nil
註:Swift中的nil和OC中的nil代表的含義是不一樣的,OC中的nil是一個指定沒有類型對象的指標,在Swift中nil是一個確定類型的空省值,任何類型的選配值都可以設定成nil,不一定要是物件類型。