今天要介紹的是Swift中也很常用的集合型別與列舉。
在資料的處理中,集合算是很常遇到與使用的,今日內容有Array, Dictionary,Tuple Set and enum 這幾種型別。
現在,我們馬上開始!
如何建立playground,請參考Day4的文章
https://ithelp.ithome.com.tw/articles/10217428
https://developer.apple.com/documentation/swift/array
看官方文件中Array可以知道,其實中Element是個泛型,可以放入內建型別(Int, String),或是自訂的型別(class...)
現在我們來看看程式碼
//var names: Array<String> = ["mike", "peter", "bonnie"]
var names: [String] = ["mike", "peter", "bonnie"]
// 取出第一筆資料
names[0]
// error: Execution
//names[3]
// 取出總數量
names.count // 3
Array內的Element,必須存放相同的型別
Array的索引Index是從0開始計算
如果取出超過索引的資料,可是會報錯的
此範例的陣列,總數量為3
Array還有很多好用的方法,請參考ref6 官方文件
一般稱為字典,是一種key value pairs組合,可以透過key來得到對應的value值,
一樣來看看程式碼
// 建立一個字典儲存考試成績
let classScores:[String : [Int]] = [
"mike": [80, 90, 100],
"mike": [80, 90, 100],
"peter": [90, 90, 90],
"bonnie": [100, 100, 100]
]
// 更新字典的值
classScores.updateValue([100, 100, 100], forKey: "peter")
classScores["mike"] = [100, 100, 100]
// 取出字典的值
for (name, scores) in classScores {
print("\(name)的成績: 國文: \(scores[0]), 英文: \(scores[1]), 數學: \(scores[2])")
}
/*
mike的成績: 國文: 100, 英文: 100, 數學: 100
bonnie的成績: 國文: 100, 英文: 100, 數學: 100
peter的成績: 國文: 100, 英文: 100, 數學: 100
*/
我們宣告一個字典,用來存放考試分數
更新字典的值,可用字典["索引"],或是updateValue()方法來更新都可以
並使用for loop來取出每個人的分數
而value的型別為[Int]整數陣列
這邊要注意key是不可重複的,不然會報錯
更多Dictionary用法,請參考ref7官方文件
與Array非常類似,可以存放同一類型(型別)的資料,但是每個值都是唯一,不可重複。
例如要存放撲克牌1-52,不重複的牌卡,就可以使用Set
一樣來看看程式碼
// 設定第一個Set
var primes = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101]
// 取出Set的內容
let firstPrime = primes[0] // 2
// 取出Set的數量
var primeCount = primes.count // 26
// 清空所有Set的內容
primes.removeAll()
primeCount = primes.count // 0
//* 設定第一個Set來存放質數集合
//* 取出Set的數量可以用primes.count
//* 清空Set所有內容可以用removeAll()方法
// 定義一個enum
enum cloudService: CaseIterable {
case aws, azure, gcp, none
}
// 取出enum的值
var amazon = cloudService.aws
var microsoft = cloudService.azure
var google = cloudService.gcp
// 也可以搭配switch使用
let cloud1 = cloudService.aws
switch cloud1 {
case .aws:
print("use \(amazon)")
case .azure:
print("use \(microsoft)")
case .gcp:
print("use \(google)")
default:
print("no use")
}
// use aws
// 取出所有列舉的內容,搭配CaseIterable
for cloud in cloudService.allCases {
print(cloud)
}
// aws, azure, gcp, none
定義了一個enum裡面有四個值
enum與switch可以做很好的搭配
如果要巡覽所有enum的值,可以搭配CaseIterable這個protocol
在今天的文章裡,我們介紹了幾種型別,包含了Array, Dictionary, Set, Tuple, enum,一般程式碼在寫的時候,也還滿常用到的。
而Ref8中的Swift 起步走這本電子書,寫的滿不錯的,作者本身也有購買,如果預算有限也可以看前一版的open source版本(真是佛心)。
作者本身在學習時,看了滿多種類的教材,將會在本系列文章的最後,統一整理成一篇,推薦給大家。
今天的內容就到這邊,感謝讀者們的閱讀。
https://github.com/chiron-wang/IT30_11
彼得潘的 Swift iOS App 開發問題解答集
https://medium.com/%E5%BD%BC%E5%BE%97%E6%BD%98%E7%9A%84-swift-ios-app-%E9%96%8B%E7%99%BC%E5%95%8F%E9%A1%8C%E8%A7%A3%E7%AD%94%E9%9B%86
iOS 13 & Swift 5 - The Complete iOS App Development Bootcamp - Angela Yu
https://www.udemy.com/course/ios-13-app-development-bootcamp/
深入淺出 iPhone 開發 (使用 Swift4) - WeiWei
https://www.udemy.com/course/iphone-swift4/
心智圖軟體Xmind
https://www.xmind.net/
彼得潘的Swift程式設計入門
https://www.tenlong.com.tw/products/9789572246573
《The Swift Programming Language》正體中文版
https://tommy60703.gitbooks.io/swift-language-traditional-chinese/content/chapter2/01_The_Basics.html#floating-point_numbers
Apple Developer Document [array]
https://developer.apple.com/documentation/swift/array
Apple Developer Document [Dictionary]
https://developer.apple.com/documentation/swift/dictionary
Apple Developer Document [Tuple]
https://docs.swift.org/swift-book/ReferenceManual/Types.html
Apple Developer Document [Set]
https://developer.apple.com/documentation/swift/set
Enumerations
https://docs.swift.org/swift-book/LanguageGuide/Enumerations.html
Swift 起步走 集合型別
https://itisjoe.gitbooks.io/swiftgo/content/ch1/collection_types.html