《Swift學(xué)習(xí)筆記》05 - 基本運算符簡介

介紹:Swift 語言由蘋果公司在 2014 年推出楼眷,用來撰寫 Mac OS 和 iOS 應(yīng)用程序,并且Swift還是開源的粟瞬,開源地址:https://github.com/apple/swift刹泄,同時附上官方博客地址:https://swift.org
目前Swift已經(jīng)發(fā)展到了第五版本。顯然蘋果大有推翻 OC “江山”的意思.
今天就來初探一下Swift,看看究竟為何swift有這么大的能力。
參考內(nèi)容:
Swift中文
YungFan老師

swift
1. 基本運算符介紹
  • Swift 在支持 C 中的大多數(shù)標(biāo)準(zhǔn)運算符的同時也增加了一些排除常見代碼錯誤的能力。賦值符號( = )不會返回值蔓彩,以防它被誤用于等于符號( == )的意圖上。算數(shù)符號( + , - , * , / , % 以及其他)可以檢測并阻止值溢出踱侣,以避免你在操作比儲存類型允許的范圍更大或者更小的數(shù)字時得到各種奇奇怪怪的結(jié)果粪小。
  • Swift 提供了兩種 C 中沒有的區(qū)間運算符( a..<b 和 a...b ),來讓你便捷表達(dá)某個范圍的值抡句。
2. 專門用語

運算符包括一元探膊、二元、三元:

  • 一元運算符對一個目標(biāo)進(jìn)行操作(比如 -a )待榔。一元前綴運算符在目標(biāo)之前直接添加(比如 !b )逞壁,同時一元后綴運算符直接在目標(biāo)末尾添加(比如 c! )。
  • 二元運算符對兩個目標(biāo)進(jìn)行操作(比如 2 + 3 )同時因為它們出現(xiàn)在兩個目標(biāo)之間锐锣,所以是中綴腌闯。
  • 三元運算符操作三個目標(biāo)。如同 C雕憔,Swift語言也僅有一個三元運算符姿骏,三元條件運算符( a ? b : c )。

受到運算符影響的值叫做操作數(shù)斤彼。在表達(dá)式 1 + 2 中分瘦, + 符號是一個二元運算符蘸泻,其中的兩個值 1 和 2 就是操作數(shù)。

3. 賦值運算
  • 賦值運算符( a = b )可以初始化或者更新 a 為 b 的值:
let a = 10
let b = 20
let c = a + b
  • 如果賦值符號右側(cè)是擁有多個值的元組嘲玫,它的元素將會一次性地拆分成常量或者變量:
let (d , e) = (10, 20)
print(d, e)
//print 10 20

與 Objective-C 和 C 不同悦施,Swift 的賦值符號自身不會返回值。下面的語句是不合法的:

if x = y {
    // 這是不合法的, 因為 x = y 并不會返回任何值去团。
}

這個特性避免了賦值符號 (=) 被意外地用于等于符號 (==) 的實際意圖上抡诞。Swift 通過讓 if x = y 非法來幫助你避免這類的錯誤在你的代碼中出現(xiàn)。

4. 算數(shù)運算符

和其他編程語言并無不同土陪。Swift 對所有的數(shù)字類型支持四種標(biāo)準(zhǔn)算術(shù)運算符:

  • 加 ( + )

  • 減 ( - )

  • 乘 ( * )

  • 除 ( / )

  • 求余 (%)

  • 不同于OC昼汗,Swift支持 String 的拼接

"hello " + "Swift" 
//print "hello Swift"
  • 一元減號/加法運算符
    數(shù)字值的正負(fù)號可以用前綴 – 來切換,我們稱之為 一元減號運算符:
    一元減號運算符( - )直接在要進(jìn)行操作的值前邊放置旺坠,不加任何空格乔遮。
let three = 3
let minusThree = -three // minusThree equals -3
let plusThree = -minusThree // plusThree equals 3, or "minus minus three"

一元加號運算符 ( + )直接返回它操作的值,不會對其進(jìn)行任何的修改:

let minusSix = -6
let alsoMinusSix = +minusSix // alsoMinusSix equals -6

盡管一元加號運算符實際上什么也不做取刃,你還是可以對正數(shù)使用它來讓你的代碼對一元減號運算符來說顯得更加對稱。

5. 組合賦值符號

如同 C 出刷,Swift 提供了由賦值符號( = )和其他符號組成的 組合賦值符號 璧疗。一個加賦值符號的栗子 ( += ):

var a = 1
a += 2
// a is now equal to 3

表達(dá)式 a += 2 其實就是 a = a + 2 的簡寫。效率上來講馁龟,加號和賦值符號組合成的一個運算符能夠同時進(jìn)行這兩個操作崩侠。
注意:
組合運算符不會返回任何值。舉例來說坷檩,你不能寫成這樣 let b = a += 2 却音。這個與前邊提到的增量和減量符號的行為不同。

6. 比較運算符

Swift 支持所有 C 的標(biāo)準(zhǔn)比較運算符:
相等 ( a == b )
不相等 ( a != b )
大于 ( a > b )
小于 ( a < b )
大于等于 ( a >= b )
小于等于 ( a <= b )

Swift 同時也提供兩個等價運算符( === 和 !== )矢炼,你可以使用它們來判斷兩個對象的引用是否相同系瓢。

  • 你同樣可以比較擁有同樣數(shù)量值的元組,只要元組中的每個值都是可比較的句灌。比如說夷陋,Int 和 String 都可以用來比較大小,也就是說 (Int,String) 類型的元組就可以比較胰锌。一般來說骗绕, 比較的元組每個對應(yīng)的類型要是相同的,同時Bool 不能比較资昧,這意味著包含布爾值的元組不能用來比較大小酬土。
    元組以從左到右的順序比較大小,一次一個值格带,直到找到兩個不相等的值為止撤缴。如果所有的值都是相等的刹枉,那么就認(rèn)為元組本身是相等的。比如說:
(1, "zebra") < (2, "apple")   // true because 1 is less than 2
(3, "apple") < (3, "bird")    // true because 3 is equal to 3, and "apple" is less than "bird"
(4, "dog") == (4, "dog")      // true because 4 is equal to 4, and "dog" is equal to "dog"

Swift 標(biāo)準(zhǔn)庫包含的元組比較運算符僅支持小于七個元素的元組腹泌。要比較擁有七個或者更多元素的元組嘶卧,你必須自己實現(xiàn)比較運算符。

7. 三元條件運算符

三元條件運算符是一種有三部分的特殊運算凉袱,它看起來是這樣的: question ? answer1 : answer2 芥吟。這是一種基于 question 是真還是假來選擇兩個表達(dá)式之一的便捷寫法。如果 question 是真专甩,則會判斷為 answer1 并且返回它的值钟鸵;否則,它判斷為 answer2 并且返回它的值涤躲。

let contentHeight = 40
let hasHeader = true
let rowHeight = contentHeight + (hasHeader ? 50 : 20)
// rowHeight is equal to 90
8. 合并空值運算符

合并空值運算符 ( a ?? b )如果可選項 a 有值則展開棺耍,如果沒有值,是 nil 种樱,則返回默認(rèn)值 b 蒙袍。表達(dá)式 a 必須是一個可選類型。表達(dá)式 b 必須與 a 的儲存類型相同嫩挤。

合并空值運算符是下邊代碼的縮寫:

a != nil ? a! : b

如果 a 的值是非空的害幅, b 的值將不會被考慮。這就是所謂的 短路計算 岂昭。

let defaultColorName = "red"
var userDefinedColorName: String? // defaults to nil
var colorNameToUse = userDefinedColorName ?? defaultColorName
// 返回了 defaultColorName  的值以现, red 

如果你給 userDefinedColorName 指定一個非空的值然后讓合并空值運算符在檢查一次,那么 userDefinedColorName 中封裝的值將會替換掉默認(rèn)值:

userDefinedColorName = "green"
colorNameToUse = userDefinedColorName ?? defaultColorName

// 返回了 userDefinedColorName  的值约啊, green 
9. 區(qū)間運算符

Swift 包含了兩個 區(qū)間運算符 邑遏,他們是表示一個范圍的值的便捷方式。

9.1 閉區(qū)間運算符

  • 閉區(qū)間運算符( a...b )定義了從 a 到 b 的一組范圍恰矩,并且包含 a 和 b 记盒。 a 的值不能大于 b 。
for index in 1...5 {
    print(index);
}
// print : 1
// print : 2
// print : 3
// print : 4
// print : 5

9.2 半開區(qū)間運算符

  • 半開區(qū)間運算符( a..<b )定義了從 a 到 b 但不包括 b 的區(qū)間枢里,即半開孽鸡,因為它只包含起始值但并不包含結(jié)束值。(十奶注:其實就是左閉右開區(qū)間栏豺。)如同閉區(qū)間運算符彬碱, a 的值也不能大于 b ,如果 a 與 b 的值相等奥洼,那返回的區(qū)間將會是空的
let names = ["Anna", "Alex", "Brian", "Jack"]
let count = names.count
for i in 0..<count {
    print("Person \(i + 1) is called \(names[i])")
}
// Person 1 is called Anna
// Person 2 is called Alex
// Person 3 is called Brian
// Person 4 is called Jack

注意數(shù)組包含四個元素巷疼,但是 0..<count 只遍歷到 3(元素序號的最大值),因為這是一個半開區(qū)間。

9.3 單側(cè)區(qū)間
閉區(qū)間有另外一種形式來讓區(qū)間朝一個方向盡可能的遠(yuǎn)——比如說嚼沿,一個包含數(shù)組所有元素的區(qū)間估盘,從索引 2 到數(shù)組的結(jié)束。在這種情況下骡尽,你可以省略區(qū)間運算符一側(cè)的值遣妥。因為運算符只有一側(cè)有值,所以這種區(qū)間叫做單側(cè)區(qū)間攀细。
我理解為:
[值...]:取出從某一位開始到最后一位的所有元素
[...值]:取出從某一位開始到最后一位的所有元素

for name in names[1...] {
    print(name)
}

for name in names[...3] {
    print(name)
}

for name in names[1...3] {
    print(name)
}

for name in names[1..<3] {
    print(name)
}

單側(cè)區(qū)間可以在其他上下文中使用箫踩,不僅僅是下標(biāo)。你不能遍歷省略了第一個值的單側(cè)區(qū)間谭贪,因為遍歷根本不知道該從哪里開始境钟。你可以遍歷省略了最終值的單側(cè)區(qū)間;總之俭识,由于區(qū)間無限連續(xù)慨削,你要確保給循環(huán)添加一個顯式的條件。你同樣可以檢測單側(cè)區(qū)間是否包含特定的值套媚,就如下面的代碼所述缚态。

let range = ...5
range.contains(7)   // false
range.contains(4)   // true
range.contains(-1)  // true
10. 邏輯運算符

常見的邏輯運算符分為:

  • 與 (a && b):兩者都為真才成立(true), 否則為( false )

  • 或(a || b):兩者中有一個為為真 就成立(true)堤瘤,兩者同時為假 才為 ( false )

  • 非 ( !a ) : 轉(zhuǎn)換 bool 值 猿规,把 true 變成 false , 把 false 變成 true 宙橱。

同時 它們之前可以進(jìn)行混合的邏輯運算

let oneTrue = true
let twoFalse = false
let threeTrue = true

if !oneTrue {
    print("oneTrue 為 假")
}else{
    print("oneTrue 為 真")
}
// oneTrue 為 真

if !twoFalse {
    print("twoFalse 為 假")
}else{
    print("twoFalse 為 真")
}
// twoFalse 為 假

if oneTrue && twoFalse {
    print("oneTrue 和 twoFalse 都為真!")
}else{
    print("oneTrue 和 twoFalse 中有一個為假!")
}
// oneTrue 和 twoFalse 中有一個為假!

if oneTrue || twoFalse {
    print("oneTrue 和 twoFalse 中有一個為假!")
}else{
    print("oneTrue 和 twoFalse 都為假!")
}
// oneTrue 和 twoFalse 中有一個為假!

混合邏輯運算
Swift 語言中邏輯運算符 && 和 || 是左相關(guān)的,這意味著多個邏輯運算符組合的表達(dá)式會首先計算最左邊的子表達(dá)式蘸拔。

if oneTrue || twoFalse || threeTrue && fourTrue{
    print("為真")
}else{
    print("為假")
}

顯示括號
很多時候雖然不被要求师郑,但使用括號還是很有用的,這能讓復(fù)雜的表達(dá)式更容易閱讀调窍。
先會優(yōu)先執(zhí)行括號里面的

if (oneTrue || threeTrue) && twoFalse {
    print("為真")
}else{
    print("為假")
}

// 為假

好了:到這里基本運算符就學(xué)習(xí)完了

可選類型的介紹就到這里了宝冕。有什么不足的地方歡迎補(bǔ)充。文章大多數(shù)內(nèi)容來自:

Swift中文
YungFan老師
再次感謝邓萨!

求職廣告:本人實習(xí)生地梨,現(xiàn)在急需一份工作,杭州南京合肥的都可以缔恳。對我感興趣的可以私聊我 0.0宝剖。謝謝~~~

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市歉甚,隨后出現(xiàn)的幾起案子万细,更是在濱河造成了極大的恐慌,老刑警劉巖纸泄,帶你破解...
    沈念sama閱讀 221,635評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件赖钞,死亡現(xiàn)場離奇詭異腰素,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)雪营,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,543評論 3 399
  • 文/潘曉璐 我一進(jìn)店門弓千,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人献起,你說我怎么就攤上這事洋访。” “怎么了征唬?”我有些...
    開封第一講書人閱讀 168,083評論 0 360
  • 文/不壞的土叔 我叫張陵捌显,是天一觀的道長。 經(jīng)常有香客問我总寒,道長扶歪,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,640評論 1 296
  • 正文 為了忘掉前任摄闸,我火速辦了婚禮善镰,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘年枕。我一直安慰自己炫欺,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 68,640評論 6 397
  • 文/花漫 我一把揭開白布熏兄。 她就那樣靜靜地躺著品洛,像睡著了一般。 火紅的嫁衣襯著肌膚如雪摩桶。 梳的紋絲不亂的頭發(fā)上桥状,一...
    開封第一講書人閱讀 52,262評論 1 308
  • 那天,我揣著相機(jī)與錄音硝清,去河邊找鬼辅斟。 笑死,一個胖子當(dāng)著我的面吹牛芦拿,可吹牛的內(nèi)容都是我干的士飒。 我是一名探鬼主播,決...
    沈念sama閱讀 40,833評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼蔗崎,長吁一口氣:“原來是場噩夢啊……” “哼酵幕!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起蚁趁,我...
    開封第一講書人閱讀 39,736評論 0 276
  • 序言:老撾萬榮一對情侶失蹤裙盾,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體番官,經(jīng)...
    沈念sama閱讀 46,280評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡庐完,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,369評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了徘熔。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片门躯。...
    茶點故事閱讀 40,503評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖酷师,靈堂內(nèi)的尸體忽然破棺而出讶凉,到底是詐尸還是另有隱情,我是刑警寧澤山孔,帶...
    沈念sama閱讀 36,185評論 5 350
  • 正文 年R本政府宣布懂讯,位于F島的核電站,受9級特大地震影響台颠,放射性物質(zhì)發(fā)生泄漏褐望。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,870評論 3 333
  • 文/蒙蒙 一串前、第九天 我趴在偏房一處隱蔽的房頂上張望瘫里。 院中可真熱鬧,春花似錦荡碾、人聲如沸谨读。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,340評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽劳殖。三九已至,卻和暖如春拨脉,著一層夾襖步出監(jiān)牢的瞬間闷尿,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,460評論 1 272
  • 我被黑心中介騙來泰國打工女坑, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人统舀。 一個月前我還...
    沈念sama閱讀 48,909評論 3 376
  • 正文 我出身青樓匆骗,卻偏偏與公主長得像,于是被迫代替她去往敵國和親誉简。 傳聞我的和親對象是個殘疾皇子碉就,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,512評論 2 359

推薦閱讀更多精彩內(nèi)容

  • 案例代碼下載 基本運算符 一個運算符是一個特殊的符號,或者你使用來檢查闷串,更改或合并值的短語瓮钥。例如,加法運算符(+)...
    酒茶白開水閱讀 2,390評論 0 0
  • 由蘋果官網(wǎng)翻譯得來fork自https://github.com/letsswift/The-Swift-Prog...
    佛祖拿屠刀閱讀 422評論 0 1
  • 運算符是檢查、改變碉熄、合并值的特殊符號或短語桨武。 Swift 支持大部分標(biāo)準(zhǔn) C 語言的運算符,且改進(jìn)許多特性來減少常...
    簡_愛SimpleLove閱讀 788評論 0 0
  • 運算符 是可以檢查锈津,修改或者組合值的特殊符號或者短語呀酸。例如,加法運算符(+)將兩個數(shù)相加琼梆,像let i = 1 +...
    BoomLee閱讀 1,823評論 0 4
  • 以五十步笑百步性誉! 你離美人魚,只差一條人魚線 思想決定行為茎杂,行為決定習(xí)慣错览,習(xí)慣決定性格,性格決定命運煌往。
    laoqin閱讀 150評論 0 0