话不多说,直接上代码
方式1:
1 | var optional1: String? |
看起来很美~问题来了:如果我希望处理optional1有值,optional2没值的情况怎么办?聪明的你立马想到了:1
2
3
4
5
6if let optional1 = optional1 {
guard let _ = optianal2 else{
print(optional1)
return
}
}
那optional1无值,optional2有值的情况,optional1与optional2都没值的情况呐…别打我:)
可见,方法一在遇到需要对多个可选值分开判断有无值的时候,似乎变得十分无力。可见的一个实际应用场景是登录界面:假设我们有loginNameTextField
与passwordTextField
两个输入框,当用户点击登录按钮时,我们需要对两个输入框进行是否有值的判断,进而给用户抛出对应的错误。
那有没有其他的方式来解包多个可选值?我们来看看第二种方式看是否可以优雅地解决这个问题。
方式2:
1 | //Swift2 |
看起来好多了~等等,case let (username?, nil):
中的?
是什么鬼,无需惊恐,这里的?
跟可选值的?
没有一点关系。username?
表示的是username
有值, nil
即表示无值。事实上,这个?
是Swift2新增的语法,我们来看看Swift2以前是怎样的:
1 | //Before Swift2 |
相比较而言,新的语法看起来精简了许多。