Swift2-同时解包多个可选值(Optionals)

话不多说,直接上代码

方式1:

var optional1: String?
var optianal2: String?

if let optional1 = optional1, optianal2 = optianal2 {
    
}

看起来很美~问题来了:如果我希望处理optional1有值,optional2没值的情况怎么办?聪明的你立马想到了:

if let optional1 = optional1 {
    guard let _ = optianal2 else{
        print(optional1)
        return
    }
}

那optional1无值,optional2有值的情况,optional1与optional2都没值的情况呐...别打我:)
可见,方法一在遇到需要对多个可选值分开判断有无值的时候,似乎变得十分无力。可见的一个实际应用场景是登录界面:假设我们有loginNameTextFieldpasswordTextField两个输入框,当用户点击登录按钮时,我们需要对两个输入框进行是否有值的判断,进而给用户抛出对应的错误。
那有没有其他的方式来解包多个可选值?我们来看看第二种方式看是否可以优雅地解决这个问题。

方式2:

//Swift2
var username: String?
var password: String?
 
switch (username, password) {
case let (username?, password?):
    print("Success!")
case let (username?, nil):
    print("Password is needed!")
case let (nil, password?):
    print("Username is needed!")
case (nil, nil):
    print("Password and username are needed!")
}

看起来好多了~等等,case let (username?, nil):中的?是什么鬼,无需惊恐,这里的?跟可选值的?没有一点关系。username?表示的是username有值, nil即表示无值。事实上,这个?Swift2新增的语法,我们来看看Swift2以前是怎样的:

//Before Swift2
var username: String?
var password: String?
 
switch (username, password) {
case let (.Some(username), .Some(password)):
    print("Success!")
case let (.Some(username), .None):
    print("Password is needed!")
case let (.None, .Some(password)):
    print("Username is needed!")
case (.None, .None):
    print("Password and username are needed!")
}

相比较而言,新的语法看起来精简了许多。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • importUIKit classViewController:UITabBarController{ enumD...
    明哥_Young阅读 9,461评论 1 10
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 14,355评论 4 61
  • 因为要结局swift3.0中引用snapKit的问题,看到一篇介绍Xcode8,swift3变化的文章,觉得很详细...
    uniapp阅读 10,075评论 0 12
  • 问题及解决方法 哨岗值 - 可选值产生的背景 在编程世界中有一种非常通用的模式,那就是某个操作是否要返回一个有效值...
    SmartisanBool阅读 4,204评论 0 0
  • 作为一位留了四五年长发的我,昨天终于下定决心去剪了短头发,其间的纠结期盼,真不是一般人能想象的。 ...
    冯陈陈阅读 5,028评论 3 3

友情链接更多精彩内容