Swift where 關(guān)鍵字

在一些Swift開(kāi)源庫(kù)里經(jīng)常能看到 where 關(guān)鍵字的使用,但是查找apple幫助文檔的時(shí)候又找不到這個(gè)關(guān)鍵字,真是太奇怪了。為了方便使用,這邊總結(jié)了一些where關(guān)鍵字的用法,希望能推動(dòng)大家寫出更加Swift的代碼。

1、用在do catch里面

enum ExceptionError:Error{
    case httpCode(Int)
}
func throwError() throws {
    throw ExceptionError.httpCode(500)
}
//do catch
do{
    try throwError()
}catch ExceptionError.httpCode(let httpCode) where httpCode >= 500{
    print("server error")
}

2、用在switch里面

//switch
var value:(Int,String) = (1,"小明")
switch value {
case let (x,y) where x < 60:
    print("不及格")
default:
    print("及格")
}

3、for in

// for in
let arrayOne = [1,2,3,4,5]
let dictionary = [1:"hehe1",2:"hehe2"]
for i in arrayOne where dictionary[i] != nil {
    print(i)
}

4、與范型結(jié)合

//第一種寫法
func genericFunction<S>(str:S) where S:ExpressibleByStringLiteral{
    print(str)
}
//第二種寫法
func genericFunction<S:ExpressibleByStringLiteral>(str:S){
    print(str)
}

5、與協(xié)議結(jié)合

//protocol
protocol aProtocol{}
extension aProtocol where Self:UIView{
    //只給遵守myProtocol協(xié)議的UIView添加了拓展
    //強(qiáng)大的協(xié)議拓展  可以給協(xié)議添加默認(rèn)實(shí)現(xiàn)   面向協(xié)議編程的基礎(chǔ)
    func getString() -> String{
        return "string"
    }
    
}
class MyView:UIView{}
extension MyView:aProtocol{}
let myView = MyView()
let aStr = myView.getString()

注意:以下是Swift3.0取消的 where 寫法

本來(lái)在while循環(huán)中也能使用的where,現(xiàn)在變成了這個(gè)樣子
1、while

//while   swift2.0中的寫法
var arrayTwo:[Int]? = []
while let arr = arrayTwo where arr.count < 5 {
    arrayTwo?.append(1)
}
//Swift3.0的寫法
var arrayTwo:[Int]? = []
while let arr = arrayTwo , arr.count < 5 {
    arrayTwo?.append(1)
}

2、if 和 guard 現(xiàn)在我也不知道怎么使用Swift化的寫法來(lái)寫這個(gè)表達(dá)式,希望能知道的朋友告訴一下,謝謝

// swift2.0中的寫法``
let sString = ""
if let str = sString where str == ""{
}

let string:String? = "小剛"
guard let str = string where str != "小明" else {
    fatalError("g看錯(cuò)人了") //
}
print("確實(shí)是小明")

合理的利用where關(guān)鍵字會(huì)令代碼有更高的可讀性、更高的簡(jiǎn)便性、更時(shí)尚??

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 一直沒(méi)有時(shí)間好好看一下swift,最近復(fù)習(xí)了一遍語(yǔ)法,這里記錄swift學(xué)習(xí)過(guò)程中遇到的一些問(wèn)題和要點(diǎn),和Obje...
    bomo閱讀 2,544評(píng)論 0 25
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫(kù)、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 15,221評(píng)論 4 61
  • 樓臺(tái)映月水茫茫。暗流傷,又何妨。南雁幾重,總與話斜陽(yáng)。 夢(mèng)里尋君千百度,纏繾倦,夜來(lái)香。無(wú)語(yǔ)凝咽,唯有淚千行。 秋...
    一滴露水閱讀 577評(píng)論 4 12
  • 1 冬天的寒風(fēng)吹著口哨,口哨聲跳上屋頂,越過(guò)房檐,最后滑進(jìn)煙道。我坐在一張木板床上看報(bào),報(bào)縫里面小字體吸引了我的注...
    鋤風(fēng)少年閱讀 323評(píng)論 2 2
  • 你是不是有這樣的苦惱? 家里無(wú)論怎么收拾都收拾不完,今天整理干凈了,明天又亂了,一旦哪天不想收拾,第二天就會(huì)加倍凌...
    迷夏的小島閱讀 430評(píng)論 1 7

友情鏈接更多精彩內(nèi)容