swift ?&&!

//let possibleNumber = "123"

//let convertedNumber = Int(possibleNumber)

//// convertedNumber 被推测为类型 "Int?", 或者类型 "optional Int"

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

 

 

let possibleNumber = "123"

 

let convertedNumber = Int(possibleNumber)

 

var serverResponseCode: Int? = 404

serverResponseCode = nil

 

 

var surveryAnswer :String?

 

if convertedNumber != nil{

    print("convertedNumber contains Some integer Value")

    

}

//

//

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

 

//注意:

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

//nil 的值。

 

 

//使用可选绑定(optional binding)来判断可选类型是否包含值,如果包含就把值赋给一个临时常量或者变 量。可选绑定可以用在 if 和 while 语句中,这条语句不仅可以用来判断可选类型中是否有值,同时可以将可选 类型中的值赋给一个常量或者变量。 if 和 while 语句,请参考控制流。

 

if let actualNumber = Int(possibleNumber){

    print("\'\(possibleNumber)\' has an integer vlaue of \(actualNumber)")

}

 

if let firstNumber = Int("4"), secondNumber = Int("44") where firstNumber < secondNumber {

    print("\(firstNumber) < \(secondNumber)")

}

//如上所述,可选类型暗示了常量或者变量可以“没有值”。可选可以通过 if 语句来判断是否有值,如果有值的话 可以通过可选绑定来解析值。

//有时候在程序架构中,第一次被赋值之后,可以确定一个可选类型总会有值。在这种情况下,每次都要判断和解

//析可选值是非常低效的,因为可以确定它总会有值。

//这种类型的可选状态被定义为隐式解析可选类型(implicitly unwrapped optionals)。把想要用作可选的类型 的后面的问号( String? )改成感叹号( String! )来声明一个隐式解析可选类型。

 

let possibleString :String? = "An optional String"

let forceString :String  = possibleString! // 需要!获取值

 

let assumString: String! = "An implicitly unwarpped optional String"

 

let implicitString:String = assumString

//注意:

//如果你在隐式解析可选类型没有值的时候尝试取值,会触发运行时错误。和你在没有值的普通可选类型后面加一

//个惊叹号一样。

if assumString != nil{

    print( assumString)

}

 

if let definiteString = assumString {

    print(definiteString)

}

posted @ 2016-03-28 17:33  lance.xiang  阅读(199)  评论(0编辑  收藏  举报