iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 5
1
自我挑戰組

老蕭咖啡館,情境式學習基礎iOS Swift系列 第 5

[2019鐵人賽Day5]老蕭咖啡館-平淡無奇的基礎觀念說明(下)

https://ithelp.ithome.com.tw/upload/images/20181020/20091333qTAlFjY5JR.png
可以不要這麼貼切嗎/images/emoticon/emoticon02.gif

==========

那這則我們來提一下迴圈的部分吧,各位讀者撐著,這篇完基礎的部分就差不多了!

Swift迴圈有:while、repeat-while、for-in

「while迴圈」

while 條件運算式 {
	迴圈執行的程式敘述
}

while迴圈敘述要先判斷條件運算式是否為真
若為真true,則執行迴圈執行的程式敘述
若為假false,則結束迴圈

Example:
題目:請印出1加到32的值

var total = 0, index = 1
while index <= 32{
    total += index
    index += 1
}
print("1加到32的值為:\(total)")

好,那再讓我們把算出來的值再減去(8)並印出來
print("1加到32再減8的值為我想對妳說的話:(total-8)")

林宇你能幫我算看看多少嗎?
好(林宇)

[過段片刻]
嗯,我算完了,520(林宇)
嗯,對的,我也愛妳

呃,這坑太大了啦,正經點!!(林宇)

「repeat-while迴圈」
repeat-while迴圈會先執行一次程式,再檢查條件運算式,接著循迴圈執行程式直到條件運算式返回false

repeat {
    迴圈執行的程式
} while 條件運算式

一樣拿while迴圈的敘述來範例吧
Example:

var total = 0,index = 1
repeat {
    total += index
    index += 1
}while index <= 32
print("1加到32的值為:\(total)")
print("1加到32再減8的值為我想對妳說的話:\(total-8)")

「for-in迴圈」

for item in items {
    迴圈執行的程式敘述
}

for-in迴圈,會遍歷一個集合內的所有項目,像是一個數字區間、陣列、字典中的值之類
數字區間??
數字區間分別以 ... 和 ..< 表示

Example:

var total = 0
for n in 1...32 {
    total += n
}
print("1加到32的值為:\(total)")
print("1加到32再減8的值為我想對妳說的話:\(total-8)")

「巢狀迴圈(nested loop)」
什麼是巢狀迴圈?
簡單說就是迴圈裡面還有個迴圈

那我們來個以前背的要死要活的東西吧「九九乘法表」

Example:

// 九九乘法表
for i in 1...9 {
    for j in 1...9 {
        print("\(i) * \(j) = \(i*j)")
    }
    print("\r")
}

https://ithelp.ithome.com.tw/upload/images/20181020/20091333qBbzHeY0gI.png

==========

那好,迴圈講完了,來説説陣列吧
還有啊,頭好暈啊!(林宇)
快說完了,因為是基礎不會說太深的,深入的自己去研究吧

「集合型別」
Swift提供三種基本的集合型別:Array、Set、Dictionary 用來儲存集合資料
儲存的資料型別必須明確,且都只能儲存同一種型別的資料。

Array陣列:按順序儲存資料
Set集合:沒有順序,不能重複儲存資料
Dictionary字典:沒有順序,key : value(識別鍵 : 值),經由唯一的識別鍵找到需要的值

「陣列」
陣列(array)使用有序列表儲存同一型別的多個值
相同的值可以多次出現在一個陣列的不同位置中

陣列無帶預設值的方式為[Element](Element是表示的型別,Ex:Int、String、Double之類的
Example:
宣個一個空陣列,型別為String
var v1: [String] = []

而有帶預設值的方式為以下兩種:
var v1 = ["Go","Good"]
or
var v1: [String] = ["Go","Good"]

有注意到,為何第一項不用宣告型別嗎??
那是因為Swift會自動的型別推斷,所以陣列中如果明確的表示了是什麼型別的值,就不用再標註型別

Example:
宣告個陣列,並帶預設值,接著使用迴圈印出

var testValue = ["IT","鐵人賽","一極棒"]
for valueOutput in testValue {
    print(valueOutput)
}

https://ithelp.ithome.com.tw/upload/images/20181020/20091333Kq7rZPMyVA.png

那好,迴圈講完了,來説説陣列吧
還有啊,頭好暈啊!(林宇)
快說完了,因為是基礎不會說太深的,深入的自己去研究吧

「集合型別」
Swift提供三種基本的集合型別:Array、Set、Dictionary 用來儲存集合資料
儲存的資料型別必須明確,且都只能儲存同一種型別的資料。

Array陣列:按順序儲存資料
Set集合:沒有順序,不能重複儲存資料
Dictionary字典:沒有順序,key : value(識別鍵 : 值),經由唯一的識別鍵找到需要的值

「陣列」
陣列(array)使用有序列表儲存同一型別的多個值
相同的值可以多次出現在一個陣列的不同位置中

陣列無帶預設值的方式為[Element](Element是表示的型別,Ex:Int、String、Double之類的
Example:
宣個一個空陣列,型別為String

var v1: [String] = []

而有帶預設值的方式為以下兩種:
var v1 = ["Go","Good"]
or
var v1: [String] = ["Go","Good"]

有注意到,為何第一項不用宣告型別嗎??
那是因為Swift會自動的型別推斷,所以陣列中如果明確的表示了是什麼型別的值,就不用再標註型別

Example:
宣告個陣列,並帶預設值,接著使用迴圈印出

var testValue = ["IT","鐵人賽","一極棒"]
for valueOutput in testValue {
    print(valueOutput)
}

陣列的操作也是有屬性可用的,有count、isEmpty、insert、removeAtIndex(x)、removeLast
count是用來表示陣列內值的數量
isEmpty是用來檢查陣列內是否有值,並會返回一個布林值
insert是用來把指定值加入指定陣列位置
removeAtIndex(x)是用來指定位置資料
removeLast是用來刪除最後一筆資料

拿上個範例來體驗一下吧
Example:

var testValue = ["IT","鐵人賽","一極棒"]
testValue.count //算陣列數量
testValue.insert("超讚", at: 3) //加入指定位置
testValue.remove(at: 0) //刪除指定位置
testValue.removeLast() //刪除最後一筆

for valueOutput in testValue {
    print(valueOutput)
}

https://ithelp.ithome.com.tw/upload/images/20181020/20091333sJMe0pwGmN.png

「字典」
有兩種使用方法,都是通用的
var dict: Dictionary<鍵的型別, 值得型別>
or
var dict: [鍵的型別: 值的型別]

字典(dictionary)用來儲存多個相同型別的值
每個值(Value)都屬於一個唯一的鍵(Key),鍵作為字典中這個值的識別,所有鍵的型別也必須相同(鍵與值的型別不一定要相同)

更新指定鍵值
updateValue(value, forKey: key)

刪除指定鍵
removeValue(forKey: key)

Example:

var testValue: Dictionary<String, String> = ["v1":"IT","v2":"鐵人賽","v3":"一極棒"]

print("數量:",testValue.count) //算陣列數量

//列出值
for (code, value) in testValue {
    print("\(code): \(value)")
}
//純列出key值
for code in testValue.keys {
    print(code)
}
//純列出value值
for value in testValue.values {
    print(value)
}

//更新指定鍵值
testValue.updateValue("超讚", forKey: "v3")
print(testValue["v3"])

//刪除指定鍵
testValue.removeValue(forKey: "v1")
//列出值
for (code, value) in testValue {
    print("\(code): \(value)")
}

https://ithelp.ithome.com.tw/upload/images/20181021/20091333nnclFxUv2X.png

https://ithelp.ithome.com.tw/upload/images/20181021/200913337m9NFnJo4Z.png


上一篇
[2019鐵人賽Day4]老蕭咖啡館-平淡無奇的基礎觀念說明(中)
下一篇
[2019鐵人賽Day6]老蕭咖啡館-信念與奢求(內附隨機挑選器)
系列文
老蕭咖啡館,情境式學習基礎iOS Swift30

尚未有邦友留言

立即登入留言