iT邦幫忙

2018 iT 邦幫忙鐵人賽
DAY 2
1
Software Development

無中生有-從SWIFT語法學習到iOS APP的開發系列 第 2

Day 2 - swift 語法 (part I)

前言

程式語言就是一門語言,而語言是拿來溝通,所以程式語言就是拿來跟電腦溝同的語言。我們學習高階的程式語言是從語法開始,看過所有的基本語法後才可以繼續後續的學習,當然每個人的學習方法不同,也不見得要依照我得方法開始。只是對於初學者而言,語法就是基礎,你總不會還沒學會英文字母,就開始看原文書吧!!

官方手冊需要花時間好好看,但不用一次就背起來,他就像字典一樣是工具書,而工具書就是當你忘了怎麼寫的時候,可以翻閱。這跟學英文一樣,你懂的單字夠多就好,不是非得把英文字典全部背起來~~

宣告

var 宣告變數
let 宣告常數 (佔用記憶體空間較少,如果確定該值不會變動,盡量設為常數)

let str = “hello world”
var value = 0
value=10
value = ”十“ //會編譯錯誤

常數,顧名思義,除了在宣告時要給予初始值外,之後也無法在變更。
變數,宣告時不一定要給值,之後也可以任意修改。
PS: = 左右兩側要平衡 (等號左邊有幾個空白,右邊就有幾個。沒有空白就都沒有)

但是swift很貼心的在變數或常數宣告時可以省略資料型態,其型態會由等號右邊的值來決定,以上例來說常數 str 已設定為字符串型態,value 已設定為整數型態。

swift語法在資料型態的要求上非常嚴謹,已經宣告的變數不可以再放入不同的資料型態,上例的value已設定為整數型態,不可再放入字串。

let zero = 0

zero沒有指定資料型態,會依據等號右邊的0,自動設置為Int型態,如果將值改為0.0,就會變成Float型態,當然也可以一開始就設定型態,Ex:

let one: Float = 1.0

小數點資料型態有兩種 :
Double 小數點類型數字(顯示位數較多)
Float 小數點類型數字(顯示位數較少)

字串與字元

字串資料型態 :String
字元資料型態 :Character
字元型態只能儲存一個字,字串是由一系列字元組合而成。swift語言中都是以雙引號作為開始與結尾,Ex:

let one: Character = "1"
let str: String = "hello"

字串可以在雙引號中使用()來插入一個變數或常數,並且不用管型別問題,直接轉換為字串型別,Ex:

let age = 13
let str = "他\(age)歲"

Str內容為 「他13歲」

迴圈

Swift語言中有三種類型:For-In迴圈、While迴圈與Repeat-While迴圈。

  • For-In迴圈
for i in 1...10 {
	print(i)
}
//印出整數數字 1、2、3、4...10
  • While迴圈
    當while後的判斷條件為真的時候,就會進入while迴圈執行
var oddnumber = 1
while oddnumber < 10 {
	print(oddnumber)
	oddnumber += 2
}
//印出數字1、3、5、7、9
  • Repeat-While迴圈
var oddnumber = 1
repeat {
	print(oddnumber)
	oddnumber += 2
} while oddnumber < 10
//印出數字1、3、5、7、9

由於條件檢查是在程式碼最後面,因此使用Repeat-While迴圈時,至少會先執行一次。

陣列、集合、字典

三者差異

  • 陣列(Array)
    使用整數索引值(index)來存取內容,索引值從0開始到陣列數量減1為止。
  • 集合(Set)
    只能判斷某個值是否在集合內,且無法透過索引值(index)或鍵值(Key)來存取集合內容。但可以進行集合運算,例如:交集、聯集、對稱差集、差集。
  • 字典(Dictionary)
    透過鍵(Key)值來存取內容,鍵值不限定整數,可以是任何型態。

陣列

使用let宣告一個整數陣列,該陣列內容就固定了,只能讀取不能修改,此外可透過索引值做單一讀取

let numbers = [3, 5, 9, 14, 18]
let value = numbers[1]	//value = 5

若改使用var宣告陣列,就可以修改內容

var names = ["Tom", "Julia", "Charlie"]
names[0] = "John" //names被替換成 ["John", "Julia", "Charlie"]

也可以利用append()函數將資料加到陣列最後面,也可以用insert()函數將資料插入到指定位置

names.append("Henry")
//names = ["John", "Julia", "Charlie", "Henry"]
names.insert("Terry", at: 1)
//names = ["John", "Terry", "Julia", "Charlie", "Henry"]

屬性count用來取得陣列中有幾筆資料

let count = names.count //count = 5

remove(at: )用來刪除特定索引值的資料,removeAll()來刪除陣列中所有資料

names.remove(at: 2) //"Julia" 被刪除了
names.removeAll() //names內資料全部刪除

集合

集合主要拿來儲存不需要強調索引值或鍵值的資料。就是不需要將資料放入特定位址,也不需要刪除特定位址的資料。

要確認集合中是否包含某個特定值,可以使用contains()函數

var car: Set = ["方向盤", "輪子", "車門", "車窗"]
car.contains("引擎")	//false

將資料加入集合中,可以使用insert()。若要將資料刪除,可以使用remove()。要刪除集合中所有資料,使用空集合[]即可。
PS:新加入集合的資料並不會放在集合最後面「位置」,因為集合本身是沒有索引值或鍵值去存放資料,所以也沒有所謂「位置」的區別。

car.insert("天窗")
//car = "車門", "方向盤", "車窗", "天窗", "輪子"
let standardcar = car.remove("天窗")
//car = "車門", "方向盤", "車窗", "輪子"
car = []
//集合內資料全部清空

集合共有四種集合運算

  1. 交集 (intersects)
  2. 聯集(union)
  3. 對稱差集(subtract)
  4. 差集(exclusive)


圖片摘自蘋果公司開發者網站

let oddDigits: Set = [1, 3, 5, 7, 9]
let evenDigits: Set = [2, 4, 6, 8, 10]
let singleDigitPrimeNumbers: Set = [2, 3, 5, 7, 11]

oddDigits.intersection(evenDigits)
// []
oddDigits.union(evenDigits)
// [10, 2, 9, 4, 5, 7, 6, 3, 1, 8]
oddDigits.subtracting(singleDigitPrimeNumbers)
// [9, 1]
oddDigits.symmetricDifference(singleDigitPrimeNumbers)
// [2, 9, 1, 11]

字典

字典簡單講就是索引值可以自訂的陣列。字典的資料型態是Dictionary < Key , Value >,透過Key來存取特定的Value

var location: [String: String] = ["TPE": "Taipei", "TXG": "Taichung", "TNN": "Tainan"]
location["TPE"] //返回"Taipei"

刪除字典中資料,方法如下:
使用 removeValue ( forKey : )來從字典裡移除特定鍵值對(Key-Value)。如果字典存在要刪除的鍵值對,會刪除該鍵值對並且返回該鍵值對的值(value),如果鍵值對不存在則返回 nil

location["TPE"] = nil   //刪除特定Key
let removedValue = location.removeValue(forKey: "TXG") //刪除"TXG",且removedValue = "Taichung"
location = [:]  //刪除全部資料

part I 就先到這告一個段落,明天繼續其他語法~


上一篇
開始前的準備工作
下一篇
Day 3 - swift 語法 (part II)
系列文
無中生有-從SWIFT語法學習到iOS APP的開發30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
shavenking
iT邦新手 5 級 ‧ 2017-12-21 13:13:17

Hi 樓主安安,請問我可以在集合裡面放兩個一模一樣的值嗎?

比方說像是陣列我們可以:

["標籤1", "標籤1"]

那集合可以嗎?

soj iT邦新手 4 級 ‧ 2017-12-21 14:47:07 檢舉

可以放進去,但是重複的內容也是算同一個
舉例來說
let evenDigits: Set = [2, 2, 4, 6, 8, 10]
code在集合中寫入兩個2,但是重複內容會被視為同一值,因此執行evenDigits.count 他還是認定集合內只有5個內容

我要留言

立即登入留言