swift4学习:where关键词
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() {
}
}