---
title: Swift 成長之路#2
tags: Swift, beginer, 初學者, iOS, Dev
---
<style>
html, body, .ui-content {
background-color: #333;
color: #ddd;
}
.markdown-body h1,
.markdown-body h2,
.markdown-body h3,
.markdown-body h4,
.markdown-body h5,
.markdown-body h6 {
color: #ddd;
}
.markdown-body h1,
.markdown-body h2 {
border-bottom-color: #ffffff69;
}
.markdown-body h1 .octicon-link,
.markdown-body h2 .octicon-link,
.markdown-body h3 .octicon-link,
.markdown-body h4 .octicon-link,
.markdown-body h5 .octicon-link,
.markdown-body h6 .octicon-link {
color: #fff;
}
.markdown-body img {
background-color: transparent;
}
.ui-toc-dropdown .nav>.active:focus>a, .ui-toc-dropdown .nav>.active:hover>a, .ui-toc-dropdown .nav>.active>a {
color: white;
border-left: 2px solid white;
}
.expand-toggle:hover,
.expand-toggle:focus,
.back-to-top:hover,
.back-to-top:focus,
.go-to-bottom:hover,
.go-to-bottom:focus {
color: white;
}
.ui-toc-dropdown {
background-color: #333;
}
.ui-toc-label.btn {
background-color: #191919;
color: white;
}
.ui-toc-dropdown .nav>li>a:focus,
.ui-toc-dropdown .nav>li>a:hover {
color: white;
border-left: 1px solid white;
}
.markdown-body blockquote {
color: #bcbcbc;
}
.markdown-body table tr {
background-color: #5f5f5f;
}
.markdown-body table tr:nth-child(2n) {
background-color: #4f4f4f;
}
.markdown-body code,
.markdown-body tt {
color: #eee;
background-color: rgba(230, 230, 230, 0.36);
}
a,
.open-files-container li.selected a {
color: #5EB7E0;
}
</style>
# Swift 成長之路 #2
選擇這當作我的第一堂課
[Swift Programming Tutorial | FULL COURSE | Absolute Beginner](https://www.youtube.com/watch?v=CwA1VWP0Ldw)
影片開頭提到,他不會教太深,我猜應該是很新手向的教學。
---
## Type
用 `var` 宣告變數、用 `let` 宣告<font color=lightgreen>常數</font>
```swift=
var myVariable = 42
myVariable = 50
let myConstant = 42
```
Swift 有 Type Inference,Compiler 會自己猜 Data Type
```swift=
var what = 4.1
print(type(of: what)) //Double
print(what) // 4.1
```
小數預設為 Double
若要指定 Data Type,例如 Float
```swift=
var what: Float = 4.1
print(type(of: what)) //Float
print(what) // 4.1
```
Data Type 不會隱性轉型(可以稱作 Strongly Type)
[關於強弱型別 或 Dynamic/Static Type 的解釋](https://medium.com/@cpave3/understanding-types-static-vs-dynamic-strong-vs-weak-88a4e1f0ed5f)
```swift=
let label = "The width is "
let width = 94
let widthLabel = label + String(width)
```
如果不轉

也可以用 String Format 啦
```swift=
let apples = 3
let oranges = 5
let appleSummary = "I have \(apples) apples."
let fruitSummary = "I have \(apples + oranges) pieces of fruit."
```
三個 Double quote 也有支援
```swift=
let quotation = """
Even though there's whitespace to the left,
the actual lines aren't indented.
Except for this line.
Double quotes (") can appear without being escaped.
I still have \(apples + oranges) pieces of fruit.
"""
```
這個 multi-line string 設計的比 Python、Java 好
Python、Java 都會正常照搬 indentation 但視覺上就不好讀


有效的 indentation 從 2 次 Tab 開始
### Array
Array 的型別宣告長醬
```swift=
var a: [Int] = []
```
如果是 empty Array 一定要宣告型別
Array 中的 element 不能不同 Type

很讚😎👍🏻,Python 不知道在衝三小
### Set
```swift=
var ages = [1, 2, 3, 4, 5]
var agesSet = Set(ages)
print(agesSet)
```
實作用 Hash Table
### Dictionary
```swift=
let devices: [String: Int] = [
"iPhone": 2000,
"Macbook": 3999,
"iPad": 4359
]
print(devices)
print(devices["iPhone"])
```
### Function
```swift=
func add(firstNumber: Int, to secondNumber: Int) -> Int{
let sum = firstNumber + secondNumber
return sum
}
print(add(firstNumber: 43, to: 70))
```
那個 `->` 是 output 什麼東西的意思
我好喜歡這種會把 type 講清楚的語言
Python 太自由了啦😣 什麼東西都要自己心裡想
為了增加程式的可讀性,Swift 還有 argument label 跟 parameter label
`add(firstNumber: 43, 70)` 跟 `add(firstNumber: 43, to: 70)`
有一個介系詞就變得更好讀了,那個介系詞就是 argument label 可以設定成任意詞,但只能一個,本意也是希望你增加可讀性,所以你亂寫就是 Bad。
---
我發現有基礎的話,看[官網的教學](https://docs.swift.org/swift-book/documentation/the-swift-programming-language/guidedtour)很快欸