Swift中的可选变量

今天了解到Swift中可选变量,也即:

var  a?  此处的a就是个可选值,意思是该值可能是缺失的.

有值,等于 x,或者没有值。

见这个实例,来自http://www.swiftmi.com/swiftbook_cn/chapter2/01_The_Basics.html 里的可选类型部分

Swift 的String类型有一个叫做toInt的方法,作用是将一个String值转换成一个Int值。然而,并不是所有的字符串都可以转换成一个整数。字符串"123"可以被转换成数字123,但是字符串"hello, world"不行。

下面的例子使用toInt方法来尝试将一个String转换成Int:

let possibleNumber = "123" 
let convertedNumber = possibleNumber.toInt() 
// convertedNumber 被推测为类型 "Int?", 或者类型 "optional Int" 

  

因为toInt方法可能会失败,所以它返回一个可选的(optional)Int,而不是一个Int。一个可选的Int被写作Int?而不是Int。问号暗示包含的值是可选,也就是说可能包含Int值也可能不包含值。(不能包含其他任何值比如Bool值或者String值。只能是Int或者什么都没有。)

if 语句以及强制解析

你可以使用if语句来判断一个可选是否包含值。如果可选有值,结果是true;如果没有值,结果是false。

当你确定可选包确实含值之后,你可以在可选的名字后面加一个感叹号(!)来获取值。这个惊叹号表示“我知道这个可选有值,请使用它。”这被称为可选值的强制解析(forced unwrapping):

1 if convertedNumber { 
2     println("(possibleNumber) has an integer value of (convertedNumber!)") 
3 } else { 
4     println("(possibleNumber) could not be converted to an integer") 
5 } 
6 // 输出 "123 has an integer value of 123" 

 

注意:使用!来获取一个不存在的可选值会导致运行时错误。使用!来强制解析值之前,一定要确定可选包含一个非nil的值。

-------更新---------

import Foundation

var str1 = "1234"

var convertedNumber = str1.toInt()

if (convertedNumber != nil) { // 最新的用法,含义是 - 如果可选类型可以成功转化成Int类型,而不是值缺失
    
    println("(convertedNumber) have a value of (convertedNumber!)" )
}


if let AB = convertedNumber {  // 如果赋值成功,则说明可选类型convertedNumber转化成功
    
    println("(convertedNumber) have a value of (AB)" )
    
}
原文地址:https://www.cnblogs.com/summer2012/p/4052694.html