Swift语法-where关键字详解
2017-12-01 11:05
387 查看
在Swift语法里where关键字的作用跟SQL的where一样, 即附加条件判断。
1、 在集合遍历时使用where, 条件为真时执行代码块, 为假时不执行代码块。
输出:
2、在补充异常的do/catch里使用
3、 协议使用where, 只有基类实现了当前协议才能添加扩展。 换个说法, 多个类实现了同一个协议,该语法根据类名分别为这些类添加扩展, 注意是分别(以类名区分)!!!
小结: where关键字可以用在集合遍历、switch/case、协议中; Swift3时if let和guard场景的where已经被Swift4的逗号取代, 例如 if let a=param, a>10(前者需要判断是否为nil,后者相当于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条件)
相关文章推荐
- swift where与匹配模式的实例详解
- sql中的left join及on、where条件关键字的区别详解
- Android-数据库详解之一:SQLite关键字以及语法
- Android-数据库详解之一:SQLite关键字以及语法
- Swift基础语法详解(一)
- 详解Swift的switch...case语句中break关键字的用法
- Swift 基本语法详解(1)
- Swift 基本语法详解(2)
- Swift where关键字的使用
- Swift的开发环境搭建以及基本语法详解
- iOS开发之Swift基本语法详解
- 详解PostgreSQL 语法中关键字的添加
- Swift之函数语法详解
- Android-数据库详解之一:SQLite关键字以及语法
- C++ 语法 : volatile关键字详解
- Swift语法基础:18 - Swift的元组, 绑定值, Where
- Swift中defer关键字推迟执行示例详解
- Swift语法—— where语句使用
- 【Spark-Scala语法】implicit(隐式转换)关键字详解
- 12.Swift 中的关键字详解