美文网首页
swift 模式匹配的各种写法

swift 模式匹配的各种写法

作者: 王家薪 | 来源:发表于2018-06-15 15:52 被阅读15次
    let str: Any? = "123"
    
    switch str {
    case _: print("无论如何都匹配的上")
    default:break
    }
    
    if case nil = str {
        print("如果str为nil 则匹配成功")
    }
    
    // 匹配optional, 注意: 这里是不为nil匹配成功, 为nil匹配失败, 可以单独使用nil来匹配空值
    switch str {
    case _?:
        print("如果str不为nil 则匹配成功")
    default:break
    }
    
    // 匹配 optional 并赋值, 如果 str 不为nil, a = str!
    switch str {
    case let a?:
        print("如果str 不为nil 匹配成功 a 是 Any类型的")
    default:break
    }
    
    // 不同于常规的 if let 这里的 a 仍然是可选值
    if case let a = str {
        print("把str匹配给a,必然匹配成功 ")
    }
    
    // 类型匹配
    switch str {
    case _ as Int: print("str 是 Int 类型的吗?")
    default:break
    }
    
    // 匹配并转换 如果匹配成功 a 是String类型的
    if case let a as String = str {
        print("str 是string 类型的")
    }
    
    // 匹配值 因为swift不会隐式转换类型 所以想要匹配成功需要显示转换
    switch str as? String {
    case "str"?: print("值相同 匹配成功")
    default:break
    }
    
    // is 只负责判断类型 在switch中我尝试接受is的返回值 但是失败了 可能编译器觉得: 这完全没必要 因为即便接收返回值, 这个返回值将永远是 true 因为false不会被匹配
    switch str {
    case is String:
        print("is 匹配")
    default:break
    }
    
    // 如果用if case 就能得到返回值 但是不会判断`s is Int`的结果
    if case let a = str is Int {
        print("即便是Int 也能匹配成功\(a)")
    }
    
    // 范围匹配
    let index:Int = 10
    switch index {
    case 10:print("没什么好说的 正常操作")
    default: break
    }
    
    switch index {
    case 0..<100:print("范围匹配")
    default:break
    }
    
    switch index {
    case 0,10: print("多个值匹配")
    default:break
    }
    

    更详细的解释: http://appventure.me/2015/08/20/swift-pattern-matching-in-detail/

    相关文章

      网友评论

          本文标题:swift 模式匹配的各种写法

          本文链接:https://www.haomeiwen.com/subject/rwjmeftx.html