Basic Operators 基本運算子 | Swift 5 新手筆記 #2

Operator 運算子是用來作為檢驗、改變或合併值的特殊符號或詞組。
Swift 支援大部份標準 C 語言的運算子,並且改善了數種性能以消除常見的編碼錯誤情形。Swift 也提供 C 語言沒有的 Range Operators 範圍運算子,像是用 ..< 和 ... (例如 a ..< b 和 a … b ) 來表達範圍的值。

Assignment operator 指派運算子
例如 a = b,指派 b 為初始化或更新 a 的值

let b = 1      //宣告一個常數 b,其值為 1
var a = 2 //宣告一個變數 a,其初始化的值為 2
a = b //現在 a 的值等於 b 的值 1

假如等號的右側是帶有多個值的複合元組,則它的結構可以一次被拆解成多個常數 constant 或變數 variable。所謂的元組 (tuple) 就是把多個任意類型的值組合成一個複合值

let (x, y) = (404, "Not Found")  // x 等於 404,y 等於 "Not Found"

Arithmetic Operators 算術運算子
Swift 支援四種基本算術運算子,其中 + 加法也可以運用在字串 String
☞ 加 Addition (+)
☞ 減 Subtraction (-)
☞ 乘 Multiplication (*)
☞ 除 Division (/)

"每天晚上" + "看到鬼"          //"每天晚上看到鬼"
"🌜" + " 🕶️" + " 👻" //"🌜 🕶️ 👻"

Remainder Operator 餘數運算子
餘數 (%) 係於整數的除法中,被除數未被除盡而剩餘的部份。餘數不會是分數,也不可能大於除數
被除數 = 除數 * 商 + 餘數
所以被除數 5 = 除數 2 * 商 2 + 餘數 1

11 % 5       //餘數是 1
-11 % 5 //餘數是 -1
11 % -5 //當除數為負數時,負號會被忽略,所以餘數仍然是 1

Compound Assignment Operators 複合指派運算子
在 Swift 中將 (=) 與其它的運算子相結合,變成複合指派運算子,例如 addition assignment operator 加法指派運算子,將 (+) 與 (=) 相結合,變成 (+=) 把加法和指派同時進行處理

var a = "💩"     //宣告變數 a 初始值為 "💩"
a += "💩" //把 a "💩" 加上 "💩" (a 值變成 "💩💩")

Comparison Operators 比較運算子
Swift 支援所有標準 C 語言的比較運算子,大部份使用在條件式運算子中
☞ 等於 Equal to (a == b)
☞ 不等於 Not equal to (a != b)
☞ 大於 Greater than (a > b)
☞ 小於 Less than (a < b)
☞ 大於或等於 Greater than or equal to (a >= b)
☞ 小於或等於 Less than or equal to (a <= b)

var score = 59              //宣告變數 score 初始值為 59
var nextStep = "" //宣告變數 nextStep 初始化儲存資料為空字串 ""
if score >= 60 { //假如 score 大於或等於 60 則 "及格"
nextStep = "及格"
} else if score < 50 { //假如 score 低於 50 (0 到 49) 則"直接當掉"
nextStep = "直接當掉"
} else {
nextStep = "依出席率加分" //其它 (50 到 59) 則 "依出席率加分"
}

Ternary Conditional Operator 三元條件運算子
是一個包含三個部份的特殊運算子,其原型是 問題 ? 答案 1 : 答案 2,即根據問題成立與否而做出二選一的結果。如果問題成立 (true) 則回傳答案 1 的結果;反之,當不成立 (false) 時回傳答案 2 的結果

let originalScore = 40    
let prepared = true
let finalScore = originalScore + (prepared ? 20 : 0)

//宣告常數 orignalScore 值為 40
//宣告常數 prepared 為 true
//宣告常數 finalScore,如果 prepared 是成立的 (true),則 originalScore 再加 20,使其 finalScore 值為 60;反之,則 originalScore 加 0 後,finalScore 的值仍為 40

Range Operators 範圍運算子
☞ 利用 … (三個點) 表達從頭到尾所包含的範圍

let score = 75
var result = ""
switch score {
case 60 ... 100 :
result = "及格"
default :
result = "直接當掉"
}
//宣告常數 score 值為 75
//宣告變數 toDo 初始化儲存資料為空字串""
//比對 score 值,符合 60 到 100 的範圍時,則 result 為 "及格"

☞ 利用 ..< (兩個點+小於符號) 表達從頭到尾但並不含尾部的範圍

let score = 59
var decision = ""
switch score {
case 50 ..< 60 :
decision = "看人品決定加分多寡"
case 60 ... 100 :
decision = "及格"
default :
decision = "直接當掉"
}
//宣告常數 score 值為 59
//宣告變數 decision 初始化儲存資料為空字串""
//比對 score 值,分數為 50 到 59 時 decision 為 "看人品決定加分多寡";分數為 60 到 100 時 decision 為 "及格";其它分數則 "直接當掉"

Logical Operators 邏輯運算子
邏輯運算子用來修改或合併布林值 true 和 false。Swift 支援三種標準邏輯運算子:
☞ 邏輯非 Logical NOT (!a)
當 a 的值 true 是不成立 (false),或是 a 的值 false 是成立的 (true) 時,就會執行指定的 { 程式碼 }

let rollCall = false            //宣告常數 rollCall 值為 false
if !rollCall { //假如沒有點名 (false) 是真的 (true) 時
print("安心蹺課去") //輸出 "安心蹺課去"
}
//其實教授最愛在課堂結束前才點名 😂 😂 😂

☞ 邏輯且 Logical AND (a && b)
當 a 和 b 兩個值同時為 true 時,整體表達式的值為 true;若其中任一值為 false 則整體表達式的值為 false

let noMidterm = true
let noFinalExam = false
if noMidterm && noFinalExam {
print("一路蹺到底")
} else {
print("蹺到考試前一週再去上課")
}
//宣告常數 noMidterm 值為 true
//宣告常數 noFinalExam 值為 false
//假如 noMidterm 和 noFinalExam 皆為 true 則 "一路蹺到底"
//其它則是 "蹺到考試前一週再去上課"
//有一種突襲性制度叫做「提前二週考試」😂 😂 😂 😂

☞ 邏輯或 Logical OR (a || b)
當 a 或 b 其中任一值為 true,則整體表達式即為 true

let midtermPass = false
let FinalexamPass = true
if midtermPass || FinalexamPass {
print("不會當人")
} else {
print("絕對當人")
}
//宣告常數 midtermPass 值為 false
//宣告常數 FinalexamPass 值為 true
//假如 midtermPass 或 FinalexamPass 任一值為 true 則 "不會當人"
//其它 (兩個都為 false 時) 則是 "絕對當人"

Source:
the swift programming language | swift 5.1
https://docs.swift.org/swift-book/LanguageGuide/BasicOperators.html#

--

--