版本記錄
版本號(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ō)一下continue
、break
、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)}
后的第一行代碼。由于switch
的case
需要窮舉所有的情況,但是有的時(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
在oc
中switch
語(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ù)~~~