天天看点

swift基础知识二

//1.if语句以及强制解析

//可以使用if语句和nil比较来判断一个可选值是否包含值,可以使用“==”,'!= ' 来执行比较

//如果可选类型有值,它将不等于nil

var num:Int? = 3
if num != nil {
    print("值不为空")
}
           

//感叹号 !

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

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

//2.可选绑定

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

let empty:String? = nil
if let constName = num {
   print(constName)
}

if let em = empty {
    print("aaaaaa")
}else{
    print("判断为假")
}

if let firstNumber = Int("4"), let secondNumber = Int("42"), firstNumber < secondNumber && secondNumber < 100 {
    print("\(firstNumber) < \(secondNumber) < 100")
}
// 输出 "4 < 42 < 100"

if let firstNumber = Int("4") {
    if let secondNumber = Int("42") {
        if firstNumber < secondNumber && secondNumber < 100 {
            print("\(firstNumber) < \(secondNumber) < 100")
        }
    }
}
// 输出 "4 < 42 < 100"
           

//注意:在if条件语句中使用常量和变量来创建一个可选绑定,仅在if语句的句中(body)中才可以获取可选绑定的值。

//相反,在guard语句中使用常量和变量来创建一个可选绑定,仅在guard语句外且在语句后才能获取到值。

//3.隐式解析可选类型

/*

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

有时候在程序架构中,第一次被赋值之后,可以确定一个可选类型总会有值。在这种情况下,每次都要判断和解析可选值是非常低效的,因为可以确定它总会有值。

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

当可选类型被第一次赋值之后就可以确定之后一直有值的时候,隐式解析可选类型非常有用。隐式解析可选类型主要被用在 Swift 中类的构造过程中

*/

let possibleString :String? = "An optional string"
let forcedString :String = possibleString! //需要感叹号来获取值,没有感叹号会报错
let assumeString :String! = "一个隐式解析可选值"
let implicitString :String = assumeString //不需要感叹号
           

//你可以把隐式解析可选类型当做一个可以自动解析的可选类型。你要做的只是声明的时候把感叹号放到类型的结尾,而不是每次取值的可选名字的结尾。

//注意:

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

//4.错误处理

//可以使用 错误处理来应对程序执行中可能遇到的错误条件。