iT邦幫忙

DAY 5
1

Swift - 從菜菜鳥到菜鳥的 30 天系列 第 5

[Swift-d5] - Playground - Array, Dictionary, Controll Flow

  • 分享至 

  • xImage
  •  

小弟的規劃表 - http://blog.kerkerj.in/blog/2014/11/01/planning/

好讀版 - http://blog.kerkerj.in/blog/2014/10/05/swift-d5/

Array

宣告

// var VARIABLE_NAME: [TYPE] = .....

var fruits: [String] = ["apple", "banana"]
var nums: [Int] = [1, 2]

// 或是讓 Swift 自行判斷類型:
var fruits = ["apple", "banana"]
var nums = [1, 2]

// 初始化:
var cars = String

ps. Beta 版時的寫法是 var fruits: String[]

現在已經變成了 var fruits: [String]

操作

// 判斷該陣列是否有值,回傳 true 或 false
fruits.isEmpty

// 增加元素
fruits.append("watermelon")
fruits += ["lemon"]

// 取值
fruits[0]
fruits[0...2]

// 刪除值 - 將 apple 移除,banana 會自動補上
fruits.removeAtIndex(0)
fruits[0]

// 兩個陣列合併 (必須相同類別 e.g. String)
fruits + cars

// 陣列元素數量
fruits.count

Dictionary

宣告

由於 Dictionary 是 key/value 為一組 (pair),

因此宣告時必須宣告 key 和 value 分別是哪種型別

var httpStatus: Dictionary<Int, String> = Dictionary<Int, String>()

var httpStatus: Dictionary<Int, String> = [200: "Success", 404: "Not found"]

操作

// 一樣有 isEmpty 方法
httpStatus.isEmpty

// 取值
httpStatus[200] // = "Success"

// 加入值
httpStatus[500] = "Internal Server Error"

// 修改值
httpStatus[200] = "True"
httpStatus.updateValue("internal server error", forKey: 500)

// 刪除值
httpStatus.removeValueForKey(200)

// 字典元素數量
httpStatus.count

Controll Flow

For loop

for fruit in fruits {
println(fruit)
}

for var index = 0; index < fruits.count; ++index {
println(fruits[index])
}

While

var index = 0
while index < fruits.count {
println(fruits[index])
index++
}

Do-while

var index = 0
do {
println(fruits[index])
index++
} while (index < fruits.count)

If

var index = 5566

if index = 5566 {
println("5566 不能亡")
}

if index = 5566 {
println("5566 不能亡")
} else {
println("You are not 5566")
}

if index = 5566 {
println("5566 不能亡")
} else if index < 5566 {
println("You are less than 5566")
} else {
println("You are bigger than 5566")
}

Switch

var index = 0

switch index {
case 0, 1, 2
println("small")
case 8, 9, 11
println("big")
default:
println("others")
}

引入 Tuple

let httpStatus = (200, "Success")

switch httpStatus {
case (let statusCode, "Error"):
println("(\(statusCode)) is Error")
case (200, let msg):
println("(\(msg))'s statusCode is 200")
}

Switch - break, continue, fallthrough

Continue

continue 會使該次的 loop 停止,並繼續執行下一個 loop

continue 不存在於單一的 switch, 只會在 loop 裡的 switch 語句時才能使用

var fruits = ["apple", "banana", "lemon", "waterlemon", "orange"]
for fruit in fruits {
println("Start")

switch fruit {
case "banana":
continue
default:
println(fruit)
}

println("End")
}

Start 和 End 理論上都要被印五次,

但是加入了 continue 後,banana case 當次 loop 的 End 就沒有被執行了

Break

通常是用在不想處理某個 case 或,特別想要處理時 (?) 反之嘛 XD

當使用了 break,會立即中斷 switch 程式碼的執行,並且跳到 switch 區塊程式碼結束的大括號後 (}) 的第一行程式

暫時想不到什麼好例子....

先借別人的例子來用吧:

let numberSymbol: Character = "三" // 簡體中文裡的數字 3
var possibleIntegerValue: Int?
switch numberSymbol {
case "1", "١", "一", "๑":
possibleIntegerValue = 1
case "2", "٢", "二", "๒":
possibleIntegerValue = 2
case "3", "٣", "三", "๓":
possibleIntegerValue = 3
case "4", "٤", "四", "๔":
possibleIntegerValue = 4
default:
break
}
if let integerValue = possibleIntegerValue {
println("The integer value of \(numberSymbol) is \(integerValue).")
} else {
println("An integer value could not be found for \(numberSymbol).")
}
// 輸出 "The integer value of 三 is 3.

Fallthrough

在 Swift 中,掃到第一個符合的 case 後,就會中斷 switch 的執行了,避免掉入一些 case 處理的錯誤

而 fallthrough, 很有趣, 宣告後,會讓 switch 繼續掃下一個 case

let num = 5
var description = "\(num) is"
switch num {
case 2, 3, 5, 7, 11, 13, 17, 19:
description += " a prime, also"
fallthrough
case 5:
println("I'm here")
default:
description += " an integer."
}
println(description)
// I'm here
// 5 is a prime, also an integer.


上一篇
[Swift-d4] - Playground - Optional, ! And ?
下一篇
[Swift-d6] - Playground - Function
系列文
Swift - 從菜菜鳥到菜鳥的 30 天30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
henryfan
iT邦新手 5 級 ‧ 2014-10-06 10:36:41

要寫好程式,這些重要的基本功都要練好,感謝大大細心的整理!

我要留言

立即登入留言