本章介紹swift中的常見操作符,並介紹使用自定義操作符實現複雜運算。
## 術語
操作符包括一元、二元和三元運算子:
## 賦值運算子
簡單賦值運算:
let b = 10
var a = 5
a = b
元組賦值運算:
let (x, y) = (1, 2)
// x 等於 1, y 等於 2
與c和objective-c不同的是,swift的賦值運算子不返回該值,使得賦值運算子不可在if語句中作條件判斷:
if x = y
這個特性能避免在**中將==寫作=
## 算術運算子
swift支援加(**+**)、減(**-**)、乘(**\***)、除(**/**)四種數值運算。
與c和object-c不同,swift的算術運算子不允許值溢位,可選擇溢位運算子(如&+b)對溢位選值。
加法運算子(+)可用在string中:
"hello, " + "world" // 等於 "hello, world"
let three = 3
let minusthree = -three
let plusthree = -minusthree
當和一元減法運算子一起使用時,可讓**更加對稱。
var a = 1
a += 2
// a 等於 3
注意符合賦值運算子不返回任何值
## 比較運算子
標準c比較運算子
注意比較運算子常用於條件語句:==和!==運算子用於判斷兩個物件是否引用同乙個例項物件。
let name = "world"
if name == "world" else
// prints "hello, world", because name is indeed equal to "world".
邏輯運算子可用於對元組型別的比較,從左到右依次比較:
(4, "dog") == (4, "dog") // true because 4 is equal to 4, and "dog" is equal to "dog"
只有當元組的每個元素能夠應用該操作符時才能進行比較:
("blue", -1) < ("purple", 1) // ok, evaluates to true
("blue", false) < ("purple", true) // error because < can't compare boolean values
注意swift標準庫只能對少於7個元素的元組使用比較運算子,否則必須自己實現比較運算子。
## 三元條件運算子
三元條件運算子(question ? answer1 : answer2)是以下**的縮寫:
if question else
三元條件運算子應謹慎使用,避免三元條件運算子的巢狀使用,這樣會使**可讀性降低。
## nil合併運算子
nil合併運算子(**a ?? b**)表明若可選型別**a**不為nil,則返回a的強制解包值,否則返回預設值b。
nil合併運算子是以下**的縮寫:
a != nil ? a! : b
nil合併運算子用於給可選型別設定預設值:
let defaultcolorname = "red"
var userdefinedcolorname: string? // 預設為 nil
var colornametouse = userdefinedcolorname ?? defaultcolorname
## 範圍運算子
範圍運算子是範圍值的縮寫形式。閉合範圍運算子(a...b)表示包含a和b的從a到b的一系列整數值。
閉合範圍運算子常用於迭代:
for index in 1...5
半開範圍運算子(a..半開範圍運算子常用於集合型別的迭代:
let names = ["anna", "alex", "brian", "jack"]
let count = names.count
for i in 0..單邊範圍忽略了雙邊範圍的某一邊,常用於陣列元素遍歷,如:
for name in names[2...]
for name in names[...2]
單邊範圍運算子也與半開範圍形式,但是該單邊必須在末尾,因為迭代起始不清楚,如:
for name in names[..<2]
單邊範圍也可用於判斷是否包含特定值:
let range = ...5
range.contains(7) // false
range.contains(4) // true
range.contains(-1) // true
## 邏輯運算子
邏輯運算子與布林值一起使用,有三種基本邏輯運算子:邏輯非運算子反轉布林值:
let allowedentry = false
if !allowedentry
仔細選擇布林常量和變數名可以幫助保持**的可讀性和簡潔性,同時避免雙重否定或混亂的邏輯語句。
邏輯與運算子與c語言相同,也會出現短路現象。
let entereddoorcode = true
let passedretinascan = false
if entereddoorcode && passedretinascan else
邏輯或運算子也有短路現象。
let hasdoorkey = false
let knowsoverridepassword = true
if hasdoorkey || knowsoverridepassword else
使用組合邏輯運算子構建複雜的邏輯表示式:
if entereddoorcode && passedretinascan || hasdoorkey || knowsoverridepassword else
注意
邏輯與和邏輯與是左結合運算子,組合邏輯表示式會首先評估最左邊的子表示式。
在組合邏輯運算子中適當使用括號可提供**的可讀性並保持意圖清晰。
if (entereddoorcode && passedretinascan) || hasdoorkey || knowsoverridepassword else
Swift教程之運算子
import foundation 4 復合賦值操作符 var a 1 a 2 一元減運算子 乙個數值前加了符號 叫作一元減運算子 let three 3 let minusthree three minusthree 3 let plusthree minusthree plusthree 3 一...
Swift教程之運算子
import foundation 4 復合賦值操作符 var a 1 a 2 一元減運算子 乙個數值前加了符號 叫作一元減運算子 let three 3 let minusthree three minusthree 3 let plusthree minusthree plusthree 3 一...
Swift 四 基本運算子及高階操作符
1 swift入門學習筆記 第一版 對swift的基礎知識點進行梳理總結。知識點一直在變,只是作為參考,以蘋果官方文件為準 2 在學習完基本的知識點以後會結合官方文件及相關資料,在此版本的基礎上進行新增更改。swift 支援大部分標準 c 語言的運算子,且改進許多特性來減少常規編碼錯誤 賦值符 不返...