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() {
}
}

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

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

你可能感兴趣的:(swift4学习:where关键词)