Swift语法-where关键字详解

本文详细介绍了Swift中的where关键字,包括在集合遍历、异常处理和协议扩展中的应用。where关键字允许在特定条件下执行代码块,如在集合遍历中过滤元素,或在协议扩展中确保基类已实现协议。此外,还提及了Swift4中逗号取代了if let和guard中的where用法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        在Swift语法里where关键字的作用跟SQL的where一样, 即附加条件判断。


1、 在集合遍历时使用where, 条件为真时执行代码块, 为假时不执行代码块。

    let array = [0, 1, 2, 3, 4, 5, 6]
    
    //使用switch遍历
    array.forEach {
        switch $0 {
        case let x where x > 3:   //where相当于判断条件
            print("后半段")
        default:
            print("默认值")
        }
    }
    
    //使用for in遍历
    for value in array where value > 2 {
        print(value)   //输出3 4 5 6
    }
    
    for (index, value) in array.enumerated() where index > 2 && value > 3 {
        print("下标:\(index), 值:\(value)")
    }

输出:

默认值
默认值
默认值
默认值
后半段
后半段
后半段
3
4
5
6
下标:4, 值:4
下标:5, 值:5
下标:6, 值:6

2、在补充异常的do/catch里使用



3、 协议使用where, 只有基类实现了当前协议才能添加扩展。 换个说法, 多个类实现了同一个协议,该语法根据类名分别为这些类添加扩展, 注意是分别(以类名区分)!!!

protocol SomeProtocol {
    func someMethod()
}

class A: SomeProtocol {
    let a = 1
    
    func someMethod() {
       print("call someMethod")
    }
}

class B {
    let a = 2
}

//基类A继承了SomeProtocol协议才能添加扩展
extension SomeProtocol where Self: A {
    func showParamA() {
        print(self.a)
    }
}
//反例,不符合where条件
extension SomeProtocol where Self: B {
    func showParamA() {
        print(self.a)
    }
}
let objA = A()
let objB = B()  //类B没实现SomeProtocol, 所有没有协议方法
objA.showParamA()  //输出1


小结: where关键字可以用在集合遍历、switch/case、协议中; Swift3时if let和guard场景的where已经被Swift4的逗号取代, 例如 if let a=param, a>10(前者需要判断是否为nil,后者相当于where条件)





评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值