swift4学习:where关键词

作者: icc_tips | 来源:发表于2017-09-14 15:20 被阅读283次

    1.0 where关键词的介绍

    最近学习swift4,发现了where这个已经我经常忽视的关键词,这里做一个关于where的笔记,资料来源于王巍老师的swift4,大家可以去(Objc中国)https://objccn.io/products/ 购买书籍来看

    一个where语句使你能够要求一个关联类型遵循一个特定的协议,以及(或)那个特定的类型参数和关联类型可以是相同的。你可写一个where语句,通过紧随放置where关键字在类型参数队列后面,其后跟着一个或者多个针对关联类型的约束,以及(或)一个或多个类型和关联类型的等于关系。

    2.0 where关键词的用处

    2.1可以在switch语句中,我使用where来限定某些条件

    let name = [20,8,59,60,70,80,98]
    name.forEach {
    switch $0{
    case let x where x>=60:
    print("及格")
    default:
    print("不及格")
    }
    }

    这里的let ..where 语句是判断x是否满足条件

    2.2在for语句中我们也可以使用where关键词来做类似的条件限定

    for score in name where score>=60 {
    print("及格了")
    }

    2.3 swift3.0之前在if..let语句中 where语句的用法

    var swift4: String? = "swift4 lai le"
    if let swift4str = swift4 where swift4str.hasPrefix("swift4") {
    print(swift4)
    }

    在swift3.0简化了这个写法如下:

    var swift4: String? = "swift4 lai le"
    if let swift4Srt = swift4, swift4Srt.hasPrefix("swift4") {
    print(swift4Srt)
    }

    2.4 同if..let一样guard..let也是如此

    var swift4: String? = "swift4 lai le"
    guard let swift4Srt = swift4, swift4Srt.hasPrefix("swift4") else{
    print("不在")
    return
    }

    2.5protocol extension 我们希望一个协议扩展的默认实现只在满足条件的适用(重点)

    //协议1
    protocol WJFProtocol1 {
    func func1()
    }
    //协议2
    protocol WJFProtocol2 {
    func func2()
    }
    // where 关键词
    // 只有同时遵守了 协议1 和 协议2 时
    // 才使 WJFProtocol2 获得扩展 并提供带有 WJFProtocol1 属性的 func1 方法
    extension WJFProtocol2 where Self: WJFProtocol2 {
    func func3() {
    }
    }

    2.6在泛型时想要对方法的类型进行限定的时候,比如在标准库里对RawRepresentable协议!=运算符定义的时候

    3.0 介绍语:祝大家学习swift愉快

    相关文章

      网友评论

      本文标题:swift4学习:where关键词

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