Swift 語言入門(三)控制流程

本文详细介绍了Swift语言中的控制流程概念,包括if条件判断、for与for-in循环、while与do-while循环、switch多路分支选择及控制转移语句等,并通过丰富的示例帮助读者理解和掌握。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Swift 語言入門(三)控制流程

Swift 語言入門(二)變數與常數 << 前情

控制流程

  • if
  • for 與 for-in
  • while 與 do while
  • switch
  • 控制轉移語句 (control transfer statements)

if

if 在程式開發,條件判斷很常用,用來判斷 是 或 否 兩種狀態。 例如字串變數,是否為空字串,數字是否大於零。

if 語法範例:

1
2
3
if z > b {
     // 做些利大於弊的事
}

if 條件判斷需加上另外的狀態處理,則用 else,例如:

1
2
3
4
5
6
if str == "" {
     // 這裡處理 空字串流程
}
else {
     // 這裡處理 非空字串
}

if、else if、else 綜合範例:

1
2
3
4
5
6
7
8
9
if (index > 0 ) { // if 條件語句可括號
     "index 大於 0"
}
else if index == 0 { // if 條件語句可不括號
     "index 等於 0"
}
else {
     "index is 為負數"
}

for 與 for-in

for 迴圈 是用來訪問連續的資料,例如你有一筆名冊的資料,想要把每個名字都印出來,就會需要它!

for 語法格式:

1
2
3
for 初始值; 條件描述; 遞增或遞減值 {
     // 條件成立 則進入此段程式
}

範例:

1
2
3
4
5
6
7
8
for var i = 0 ; i < 3 ; i++ {
     println( "var i is \(i)" )
}
 
log 輸出 =>
var i is 0
var i is 1
var i is 2

for 變數存著尋訪每個在字串的字元 in 字串 範例:

1
2
3
4
5
6
7
8
9
10
for char in "Swift" {
     println( char )
}
 
log 輸出 =>
S
w
i
f
t

for-in 陣列

for 變數存著尋訪每個在陣列的元素 in 陣列 範例:

1
2
3
4
5
6
7
8
9
10
11
let languages = [ "Swift" , "Objective-C" , "Ruby" , "Java" ]
 
for lang in languages {
     println(lang)
}
 
log 輸出 =>
Swift
Objective-C
Ruby
Java

for-in Range

也可以使用 Range 形態,例如:1..<5(代表 1 到 5,不包含 5),範例如下:

1
2
3
4
5
6
7
8
9
for i in 1 ..< 5 {
     println( "range in \(i)" )
}
 
log 輸出 =>
range in 1
range in 2
range in 3
range in 4

for-in 字典

當然強大的 for-in 語句,也支援常用的字典型態,搭配 Tuples(元組,多個元素的組合),讓尋訪字典內的 key, value 變得相當直覺!範例如下:

1
2
3
4
5
6
7
8
9
let nums = [ "one" : 1 , "two" : 2 , "three" : 3 ]
for (str, num) in nums {
     println( "\(str) is \(num)" )
}
 
=>
one is 1
two is 2
three is 3

while 與 do while

while 迴圈與 for 迴圈類似,但 while 迴圈會重複執行他的程式區塊,直到條件為 否。

while 語法格式:

1
2
3
4
5
6
7
8
9
10
// while
while 條件 {
     // 執行程式區塊
}
 
// do while
do
{
     // 執行程式區塊
} while (條件)

while

舉個例子,假設我們有個變數 decrease 帶著數值 3,在 while 迴圈內一直遞減,while 條件 大於 0,所以 decrease 在大於 0 之前,while 迴圈 都會一直被執行。

1
2
3
4
5
6
7
8
9
10
11
var decrease = 3
while decrease > 0
{
     println( "decrease \(decrease)" )
     --decrease
}
 
=>
decrease 3
decrease 2
decrease 1

do while

迴圈語句用於,不論如何,迴圈先執行再說,後面 while 條件在來決定要不要繼續執行迴圈。範例如下:

1
2
3
4
5
6
7
8
9
10
11
var increase = 0
do
{
     println( "increase \(increase)" )
     ++increase
} while (increase < 3 )
 
=>
increase 0
increase 1
increase 2

Switch

前面介紹過 if 判斷式,switch 也是判斷式,不過是對於數值的連續判斷,當我們用了很多的 if 或 else if 判斷式時,或許是我們考慮該使用 switch 的時機。

switch 語法格式:

1
2
3
4
5
6
switch 變數 {
     case 比較的數值:
         // 數值一樣時,執行的區塊
     default :
         "其他數值" 
}

Switch 數值判斷

1
2
3
4
5
6
7
8
9
10
11
12
13
let count = 3
switch count {
     case 1 :
         println( "one" )
     case 2 :
         println( "two" )
     case 3 :
         println( "three" )
     default :
         println( "other value" )
}
 
=> three

Switch 字串

switch 語句也支援字串。

1
2
3
4
5
6
7
8
9
10
11
var name = "Apple"
switch name {
     case "Apple" :
         println( "Hi Apple!" )
     case "iPhone" :
         println( "Hi iPhone!" )
     default :
         println( "請問你叫什麼名字?" )
}
=>
Hi Apple!

Switch 多數值 case 判斷

1
2
3
4
5
6
7
8
9
10
11
let number = 8
switch number {
     case 1 , 3 , 5 , 7 , 9 :
         println( "奇數" )
     case 2 , 4 , 6 , 8 , 10 :
         println( "偶數" )
     default :
         println( "其他數值" )
}
 
=> 偶數

Switch 使用 Tuple

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
let point = ( 1 , 2 )
switch point {
     case ( 0 , 0 ):
         println( "原始起點" )
     case (_, 0 ):
         println( "x=任意值, y=0" )
     case ( 0 , _):
         println( "x=0, y=任意值" )
     case ( 1 , 2 ):
         println( "坐標 1, 2" )
     default :
         println( "其他坐標" )
}
=>
坐標 1 , 2

switch 的 where 條件與 數值綁定 (Value Bindings)

Swift 語言的強大 switch 語句還可針對條件作判斷,例如下方範例 where x==y,並且將傳入的變數綁定到變數 x, y,如let (x,y)

1
2
3
4
5
6
7
8
9
10
let anotherPoint = ( 5 , 5 )
switch anotherPoint {
     case let (x,y) where x==y:
         println( "正方形" )
     default :
         println( "矩形" )
}
 
=>
正方形

Switch in Range

switch 當然也支援 Range 型別。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
var num = 9
switch num {
     case 0 ... 9 :
         println( "個位" )
     case 10 ... 99 :
         println( "十位" )
     case 100 ... 999 :
         println( "百位" )
     default :
         println( "其他" )
}
 
=>
個位

Switch Enum

在此我們可以看到 Swift語言,對於 Objective-C 的 Enums 修正了冗長的變數名稱,例如改以 .North 點描述,省略了 CompassPoint

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
enum CompassPoint {
     case North
     case South
     case East
     case West
}
 
var direction = CompassPoint.South
switch direction {
     case .North:
         println( "北邊" )
     case .East:
         println( "東邊" )
     case .West:
         println( "西邊" )
     case .South:
         println( "南邊" )
}
 
=>
南邊

標簽語句

整段的執行結果,尋訪 names 陣列,並且尋訪每個元素的字元,遇到 小寫 a 字元時,跳 (break) 下個元素。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
let names = [ "Anna" , "Alex" , "Brian" , "Jack" ]
var result = ""
nameLoop: for name in names {
     charLoop: for char in name {
         theSwitch: switch char {
             case "a" : // 只要遇到 小寫 a,就結束 charLoop
                 break charLoop
 
             default :
                 result += char
         }
     }
}
println(result)
 
=>
AnnAlexBriJ

控制轉移語句 (control transfer statements)

控制轉移語句 (control transfer statements)能讓我們撰寫控制流程時,自由的決定程式要往哪邊跑,Swift 語言有四種控制轉移語句。

  • continue
    • 在回圈內使用,continue後的內容跳過,並且將繼續執行回圈。
  • break
    • 在 迴圈 與 while 內使用,將會使程式跳離迴圈。注意與 continue 的差異。
  • fallthrough (貫穿)
    • 在 switch 語句中使用,因 Swift 語言,不需在 case 寫 break,若有特殊情況需要 fallthrough (貫穿) 兩種或以上的 case 時用到。
  • return
    • 函式回傳,在執行函式時,若要將運算變數回傳,需使用 return,return 也可回傳 Tuples (元組)。

我們往下來看範例:

continue

在 i > 5 之前,都直接把 i 印出,之後呢 加上字串,並且使用 continue 結束這回合,但迴圈還沒結束。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
for i in 1 ... 10 {
     if i > 5 {
         println( "continue \(i)" )
         continue
     }
     println(i)
}
 
=>
1
2
3
4
5
continue 6
continue 7
continue 8
continue 9
continue 10

break

break 脫離迴圈,在 i > 5 的時候,使用 break 結束這個迴圈。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
for i in 1 ... 10 {
     if i > 5 {
         println( "break \(i)" )
         break
     }
     println(i)
}
 
=>
1
2
3
4
5
break 6

fallthrough

因為 integerToDescribe 是 Int,所以它一定是數字,但未必是質數,如果是質數,則 fallthrough 到 default,因為質數也是數字。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
let integerToDescribe = 5
var integerDescription = "\(integerToDescribe) 是"
switch integerToDescribe
     {
case 2 , 3 , 5 , 7 , 11 , 13 , 17 , 19 :
     integerDescription += " 質數, 也是"
     fallthrough
 
default :
     integerDescription += " 數字"
}
println(integerDescription)
 
=>
5 是 質數, 也是 數字

return

函式回傳的一些用法,直接回傳數值或變數,亦可回傳 Tuples。

1
2
3
4
5
6
7
8
9
10
func sayHelloWorld() -> String
{
     return "Hello World"
}
 
// return with Tuple
func http404Error() -> (Int, String)
{
     return ( 404 , "Not Found" )
}

後續 >> Swift 語言入門(四)標準函式

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值