swift簡(jiǎn)單總結(jié)(十五)—— 控制轉(zhuǎn)移語(yǔ)句

版本記錄

版本號(hào) 時(shí)間
V1.0 2017.07.26

前言

我是swift2.0的時(shí)候開(kāi)始接觸的,記得那時(shí)候還不是很穩(wěn)定,公司的項(xiàng)目也都是用oc做的,并不對(duì)swift很重視,我自己學(xué)了一段時(shí)間,到現(xiàn)在swift3.0+已經(jīng)出來(lái)了,自己平時(shí)也不寫(xiě),忘記的也差不多了,正好項(xiàng)目這段時(shí)間已經(jīng)上線了,不是很忙,我就可以每天總結(jié)一點(diǎn)了,希望對(duì)自己對(duì)大家有所幫助。在總結(jié)的時(shí)候我會(huì)對(duì)比oc進(jìn)行說(shuō)明,有代碼的我會(huì)給出相關(guān)比對(duì)代碼。
1. swift簡(jiǎn)單總結(jié)(一)—— 數(shù)據(jù)簡(jiǎn)單值和類(lèi)型轉(zhuǎn)換
2. swift簡(jiǎn)單總結(jié)(二)—— 簡(jiǎn)單值和控制流
3. swift簡(jiǎn)單總結(jié)(三)—— 循環(huán)控制和函數(shù)
4. swift簡(jiǎn)單總結(jié)(四)—— 函數(shù)和類(lèi)
5. swift簡(jiǎn)單總結(jié)(五)—— 枚舉和結(jié)構(gòu)體
6. swift簡(jiǎn)單總結(jié)(六)—— 協(xié)議擴(kuò)展與泛型
7. swift簡(jiǎn)單總結(jié)(七)—— 數(shù)據(jù)類(lèi)型
8. swift簡(jiǎn)單總結(jié)(八)—— 別名、布爾值與元組
9. swift簡(jiǎn)單總結(jié)(九)—— 可選值和斷言
10. swift簡(jiǎn)單總結(jié)(十)—— 運(yùn)算符
11. swift簡(jiǎn)單總結(jié)(十一)—— 字符串和字符
12. swift簡(jiǎn)單總結(jié)(十二)—— 集合類(lèi)型之?dāng)?shù)組
13. swift簡(jiǎn)單總結(jié)(十三)—— 集合類(lèi)型之字典
14. swift簡(jiǎn)單總結(jié)(十四)—— 控制流

控制轉(zhuǎn)移語(yǔ)句

控制轉(zhuǎn)移語(yǔ)句改變你的代碼執(zhí)行順序,通過(guò)它可以實(shí)現(xiàn)代碼的跳轉(zhuǎn),swift有四種控制轉(zhuǎn)移語(yǔ)句。

  • continue
  • break
  • fallthrough
  • return

下面我們就說(shuō)一下continuebreak、fallthrough語(yǔ)句,return語(yǔ)句將在函數(shù)后面講解。


Continue

continue語(yǔ)句告訴一個(gè)循環(huán)體立即停止本次循環(huán),重新開(kāi)始下次循環(huán)迭代,但是并不會(huì)離開(kāi)整個(gè)的循環(huán)體,特別是在for條件遞增的情況下,調(diào)用continue語(yǔ)句后,迭代量仍然會(huì)被計(jì)算求值,循環(huán)體繼續(xù)像往常工作一樣,僅僅只是循環(huán)體中的執(zhí)行代碼被跳過(guò)了。

下面我們看一下swift中的例子。

    let inputStr = "great minds think alike"
    var outputStr : String = ""
    for character in inputStr.characters {
        switch character {
        case "a", "e", "i", "o", "u", " ":
            continue
        default:
            outputStr.append(character)
        }
    }
    print(outputStr)

下面看輸出結(jié)果

grtmndsthnklk

下面我們?cè)诳匆幌?code>oc中是如何實(shí)現(xiàn)的。

    NSString *inputStr = @"great minds think alike";
    NSMutableString *outputStr = [NSMutableString string];
  
    for (NSInteger i = 0; i < inputStr.length; i++) {
        
        NSString *character = [inputStr substringWithRange:NSMakeRange(i, 1)];
        if ([character isEqualToString:@"a"] || [character isEqualToString:@"e"] || [character isEqualToString:@"i"] || [character isEqualToString:@"o"] || [character isEqualToString:@"u"] || [character isEqualToString:@" "]) {
            continue;
        }
        else {
            [outputStr appendString:character];
        }
    }
    NSLog(@"outputStr = %@",outputStr);

下面我們看輸出結(jié)果

2017-07-26 13:46:10.613134+0800 JJOC[5425:1758163] outputStr = grtmndsthnklk

Break

break語(yǔ)句會(huì)立刻結(jié)束整個(gè)控制流的執(zhí)行,當(dāng)你想結(jié)束一個(gè)循環(huán)體或者switch代碼時(shí),你可以使用break。

1. 循環(huán)語(yǔ)句的break

當(dāng)在循環(huán)體內(nèi)使用break,會(huì)立刻結(jié)束整個(gè)循環(huán)體的執(zhí)行,回跳到大括號(hào)外面的第一行代碼,不會(huì)再執(zhí)行循環(huán)體。和continue不同,continue只是結(jié)束本次循環(huán),并不影響下一次循環(huán)的判斷和執(zhí)行。

下面我們看一下swift中的代碼。

    var number : Int = 0
    for value in 0...5 {
        number += 1
        if value == 3 {
            break
        }
    }
    print(number)

下面看一下輸出結(jié)果

4

接下來(lái)看一下OC中的實(shí)現(xiàn)

    NSInteger number = 0;
    for (NSInteger i = 0; i <= 5; i++) {
        number++;
        if (i == 3) {
            break;
        }
    }
    NSLog(@"number = %ld",number);

下面看一下輸出結(jié)果

2017-07-26 13:56:38.290807+0800 JJOC[5437:1760694] number = 4

2. switch語(yǔ)句中的break

switch代碼塊中使用break時(shí),會(huì)立即中斷該switch代碼塊的執(zhí)行,并且跳轉(zhuǎn)到switch代碼塊結(jié)束的大括號(hào)}后的第一行代碼。由于switchcase需要窮舉所有的情況,但是有的時(shí)候我們不想知道我們不感興趣的那些值,就可以加入break處理,跳出switch

下面我們看一下swift中代碼例子。

    let numberSymbol : Character = "三"
    var possibleValue : Int?
    switch numberSymbol {
    case "1", "一":
        possibleValue = 1
    case "2", "二":
        possibleValue = 2
    case "3", "三":
        possibleValue = 3
    case "4", "四":
        possibleValue = 4
    default:
        break
    }
    
    if let value = possibleValue {
        print("The integer value of \(numberSymbol) is \(value)")
    }
    else {
        print("An integer value could not be found for \(numberSymbol)")
    }


下面看輸出結(jié)果

The integer value of 三 is 3

接下來(lái)看一下OC中的實(shí)現(xiàn)

    NSString *characterStr = @"三";
    NSInteger possibleValue = 0;
    if ([characterStr isEqualToString:@"1"] || [characterStr isEqualToString:@"一"]) {
        possibleValue = 1;
    }
    else if ([characterStr isEqualToString:@"2"] || [characterStr isEqualToString:@"二"]) {
        possibleValue = 2;
    }
    else if ([characterStr isEqualToString:@"3"] || [characterStr isEqualToString:@"三"]) {
        possibleValue = 3;
    }
    else if ([characterStr isEqualToString:@"4"] || [characterStr isEqualToString:@"四"]) {
        possibleValue = 4;
    }
    
    if (possibleValue > 0) {
        NSLog(@"The integer value of %@ is %ld",characterStr, possibleValue);
    }
    else {
        NSLog(@"An integer value could not be found for %@",characterStr);
    }

下面看輸出結(jié)果

2017-07-26 14:14:03.744881+0800 JJOC[5445:1763022] The integer value of 三 is 3


Fallthrough

ocswitch語(yǔ)句只要某一個(gè)case不寫(xiě)break在匹配到該case后就會(huì)貫穿到下一個(gè)case,但是swift中執(zhí)行完這個(gè)case分支,就完成了整個(gè)的執(zhí)行語(yǔ)句,這個(gè)是和oc中的很大的不同。但是如果你確實(shí)需要swift中執(zhí)行貫穿的特性,你就需要在該特性的case分支中使用fallthrough關(guān)鍵字。

具體我們先看一下swift中的例子。

    let number = 5
    var description = "The number \(number) is"
    switch number {
    case 2, 3, 5, 7:
        description += " a prime number, and also"
        fallthrough
    default:
        description += " can integer"
    }
    print(description)

下面看一下輸出結(jié)果

The number 5 is a prime number, and also can integer

注意: fallthrough關(guān)鍵字不會(huì)檢查它下一個(gè)將會(huì)落入執(zhí)行的case中的匹配條件,fallthrough簡(jiǎn)單的使代碼執(zhí)行繼續(xù)鏈接到下一個(gè)case的執(zhí)行代碼,這個(gè)是oc是一樣的。

下面我們看OC 中的實(shí)現(xiàn)。


    NSInteger number = 5;
    switch (number) {
        case 2:
            
            break;
            
        case 5:

        case 7:
            NSLog(@"You implement fallthrough, you leak a (break) in last branch");
            break;
            
        default:
            break;
    }

接著看輸出結(jié)果

2017-07-26 14:31:48.158678+0800 JJOC[5455:1765511] You implement fallthrough, you leak a (break) in last branch


帶標(biāo)簽的語(yǔ)句 Labeled Statements

swift中,你可以在循環(huán)體或者switch代碼塊中嵌套循環(huán)體和switch代碼塊來(lái)創(chuàng)造復(fù)雜的控制流結(jié)構(gòu),然而,循環(huán)體和switch代碼塊兩者都可以使用break語(yǔ)句來(lái)提前結(jié)束整個(gè)方法體,因此,顯式的指明break語(yǔ)句想要終止的是哪個(gè)循環(huán)體或者switch代碼塊,會(huì)很有用。

為實(shí)現(xiàn)這個(gè)目的,可以使用標(biāo)簽來(lái)標(biāo)記一個(gè)循環(huán)體或者switch代碼塊,當(dāng)使用break或者continue時(shí),帶上這個(gè)標(biāo)簽,你可以控制該標(biāo)簽代表對(duì)象中斷或者執(zhí)行。

具體結(jié)構(gòu)就是標(biāo)簽名加上冒號(hào),后面跟著循環(huán)體,如下所示。

lable name : while condition {

      statements
}

下面那我們看這個(gè)swift例子。

    var number = 10
    whilLoop : while number > 0 {

        switch number {
        case 9:
            print("9")
        case 10:
            var sum = 0
            for index in 0...10 {
                sum += index
                print(sum)
                if index == 9 {
                    break whilLoop
                }
            }
        default:
            break;
        }
        number -= 1
    }

下面看輸出結(jié)果

0
1
3
6
10
15
21
28
36
45

后記

未完,待續(xù)~~~

sea
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容