Swift字典Dictionaries与可选型

Swift字典与可选型

在swift当中,字典Dictionary元素的返回值是可选型的!

1
2
3
var pets = ["Polly":"Dog", "Joey":"Goldfish"]
print(pets["Polly"]) //print Optional("Dog")
print(pets["Polly"]!) //print "Dog"

之所以会这样,是因为在我们访问字典元素的时候,我们有可能无法确定字典的元素键是否存在!这个键很有可能是不存在的,因此元素可能为nil。当返回Optional时,我们就能使用代码来捕获键为空(不存在某key)的情况!在上面的代码第二行的返回值是Optional(“Dog”)!而在第三行时,我们使用了强制!解包,所以返回的值是"Dog"

但是字典当中元素的键不一定在每时每刻都被我们知晓,因此使用强制解包是可能会导致程序crash的!

Notice:对于字典dictionary中元素,不管元素存不存在,我们都可以使用可选型方式去解包!但是我们却不能一直使用!强制解包!

1
2
print(pets["Tome"]) //OK
//print(pets["Tome"]!) //Error

当我们不确定一个元素存不存在时,最好的处理方法是是用if 或者 if let来解包!这样的解包是安全的!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
var preferences = [
"receiveEmail":true,
"showAds":true
]

if let subscribed = preferences["receiveEmail"] {
if subscribed {
print("Send them an email")
} else {
print("Unsubscribed")
}
}

if preferences["showAds"]!{
print("Show them an Ad")
}

if preferences["showAds"] == true {
print("Show them an Ad")
}

实例中,我们是用了ifif let两种方式来解包!并且也是用了!来强制解包!在解包的过程当中,如果你不确定元素是否存在时,我们最好是用if let的方式来处理!这样的解包unwrapping 方式不会产生程序崩溃!

只有在解包之后,我们才可以对解包出来的值进行操作!

1
2
3
4
5
if subscribed {
print("Send them an email")
} else {
print("Unsubscribed")
}

这一段代码是在解包之后存在的,事实上,解包出来的subscribed的取值是确定的!如果想捕获解包异常,我们可以在if let上添加else分支来进行操作!