Swift where 关键字

作者: DelegateChai | 来源:发表于2016-11-08 18:26 被阅读3215次

    在一些Swift开源库里经常能看到 where 关键字的使用,但是查找apple帮助文档的时候又找不到这个关键字,真是太奇怪了。为了方便使用,这边总结了一些where关键字的用法,希望能推动大家写出更加Swift的代码。

    1、用在do catch里面

    enum ExceptionError:Error{
        case httpCode(Int)
    }
    func throwError() throws {
        throw ExceptionError.httpCode(500)
    }
    //do catch
    do{
        try throwError()
    }catch ExceptionError.httpCode(let httpCode) where httpCode >= 500{
        print("server error")
    }
    
    

    2、用在switch里面

    //switch
    var value:(Int,String) = (1,"小明")
    switch value {
    case let (x,y) where x < 60:
        print("不及格")
    default:
        print("及格")
    }
    

    3、for in

    // for in
    let arrayOne = [1,2,3,4,5]
    let dictionary = [1:"hehe1",2:"hehe2"]
    for i in arrayOne where dictionary[i] != nil {
        print(i)
    }
    

    4、与范型结合

    //第一种写法
    func genericFunction<S>(str:S) where S:ExpressibleByStringLiteral{
        print(str)
    }
    //第二种写法
    func genericFunction<S:ExpressibleByStringLiteral>(str:S){
        print(str)
    }
    
    

    5、与协议结合

    //protocol
    protocol aProtocol{}
    extension aProtocol where Self:UIView{
        //只给遵守myProtocol协议的UIView添加了拓展
        //强大的协议拓展  可以给协议添加默认实现   面向协议编程的基础
        func getString() -> String{
            return "string"
        }
        
    }
    class MyView:UIView{}
    extension MyView:aProtocol{}
    let myView = MyView()
    let aStr = myView.getString()
    
    
    注意:以下是Swift3.0取消的 where 写法

    本来在while循环中也能使用的where,现在变成了这个样子
    1、while

    //while   swift2.0中的写法
    var arrayTwo:[Int]? = []
    while let arr = arrayTwo where arr.count < 5 {
        arrayTwo?.append(1)
    }
    //Swift3.0的写法
    var arrayTwo:[Int]? = []
    while let arr = arrayTwo , arr.count < 5 {
        arrayTwo?.append(1)
    }
    
    

    2、if 和 guard 现在我也不知道怎么使用Swift化的写法来写这个表达式,希望能知道的朋友告诉一下,谢谢

    // swift2.0中的写法``
    let sString = ""
    if let str = sString where str == ""{
    }
    
    let string:String? = "小刚"
    guard let str = string where str != "小明" else {
        fatalError("g看错人了") //
    }
    print("确实是小明")
    
    

    合理的利用where关键字会令代码有更高的可读性、更高的简便性、更时尚😄

    相关文章

      网友评论

      • 大灰很:swift 3 中guard 直接用逗号连接
      • 少女的避風港:不错 很清晰 以前很排次用swift 现在没事看了看 发现swift还是不错的。写东西很方便很快速。
      • 1408988b6c9b:的确更“时尚”!红红火火恍恍惚惚

      本文标题:Swift where 关键字

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