1.0 where關鍵詞的介紹
最近學習swift4育苟,發(fā)現(xiàn)了where這個已經(jīng)我經(jīng)常忽視的關鍵詞凯正,這里做一個關于where的筆記腐泻,資料來源于王巍老師的swift4,大家可以去(Objc中國)https://objccn.io/products/ 購買書籍來看
一個where語句使你能夠要求一個關聯(lián)類型遵循一個特定的協(xié)議鹊漠,以及(或)那個特定的類型參數(shù)和關聯(lián)類型可以是相同的几缭。你可寫一個where語句想许,通過緊隨放置where關鍵字在類型參數(shù)隊列后面伶授,其后跟著一個或者多個針對關聯(lián)類型的約束,以及(或)一個或多個類型和關聯(lián)類型的等于關系流纹。
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 我們希望一個協(xié)議擴展的默認實現(xiàn)只在滿足條件的適用(重點)
//協(xié)議1
protocol WJFProtocol1 {
func func1()
}
//協(xié)議2
protocol WJFProtocol2 {
func func2()
}
// where 關鍵詞
// 只有同時遵守了 協(xié)議1 和 協(xié)議2 時
// 才使 WJFProtocol2 獲得擴展 并提供帶有 WJFProtocol1 屬性的 func1 方法
extension WJFProtocol2 where Self: WJFProtocol2 {
func func3() {
}
}