05-Swift可选类型

可选类型(optionals)#

使用可选类型用来处理可能缺失的情况。
有值,等于x、没有值

查看数据类型使用 option+鼠标左键

let URL = NSURL(string: "http://www.baidu.com/") // 被推测为NSURL?类型
let str: String? = "Swift"// 被推测为String?类型

//如果你声明一个可选常量或者变量但是没有赋值,它们会自动被设置为 nil 
let a:Int? 
直接打印结果.png

直接打印结果表明这是可选值,可以有值,可以为nil
注意:nil在Swift中是一个确定的值,用来表示值缺失

可选项判断#

1>使用if语句判断(需要强制解析)

if (URL != nil){
    print(URL!)
}

2>使用if let
if let:确保有值,才会进入分支

if let myUrl = URL{
    print(myUrl)
}

强制解析#

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

print(URL!)
print(str!)
不能print(a!)//会报错  fatal error: unexpectedly found nil while unwrapping an Optional value
// a没有赋值,也就不包含值

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

if let#

if let :确保有值,才会进入分支

var aName: String? = "ningcol"
// var aName: String? = nil
var aAge: Int? = 18

if let name = aName,let age = aAge {
    print(name + String(age))
}
// 可以对值进行修改
if var name = aName,let age = aAge {
    name = "lisi"
    print(name + String(age))
}

guard#

guard与if let相反,表示一定有值,没有就直接返回

let oName: String? = "张三"
let oNum: Int? = 18

guard let name = oName else { 
    print("name 为空") 
    return
}

guard let num = oNum else { 
    print("num 为空") 
    return
}

隐式解析可选类型#

可以把隐式解析可选类型当成对每次使用的时候自动解包的可选类型。即不是每次使用的时候在变量/常量后面加!,而是直接在定义的时候加!

// 非隐式解析可选类型
let possibleString: String? = "An optional string"
let forcedString: String = possibleString!//需要感叹号来获取值

// 隐式解析可选类型 
// 隐式解析是指可以确认该可选类型在赋值后一直有值
let assumedString: String! = "An implicitly unwrapped optional string"
let implicitString: String = assumedString//不需要感叹号
// 注:如果一个变量之后可能变为 nil 的话,请不要使用隐式解析可选类型,若需要在变量的生命周期中判断是否为 nil 的话,请使用普通可选类型

你可能感兴趣的:(05-Swift可选类型)