Swift 3 學(xué)習(xí) - 02 基本運算符

Swift 3.png
  • 1 . 賦值運算符
    • 1.1 賦值運算
let b = 10
var a = 5
a = b
// a is now equal to 10
    • 1.2 賦值多元組

如下,如果賦值的右邊是一個多元組,它的元素可以馬上被分解成多個常量或變量

let (x, y) = (1, 2)
// x is equal to 1, and y is equal to 2
    • 1.3 賦值操作并不返回任何值

與 C 語言和 Objective-C 不同捺疼,Swift 的賦值操作并不返回任何值余寥。所以以下代碼是錯誤的,官方說法是這個特性使你無法把(==)錯寫成(=),因為if x = y 是錯誤代碼帝蒿,Swift 能幫你避免此類錯誤發(fā)生荐糜。

if x = y {
// This is not valid, because x = y does not return a value.
}
  • 2 .算術(shù)運算符
    • 2.1 加、減葛超、乘暴氏、除

基本運算沒什么特別的,不過加法運算符可用于 String 的拼接了

"hello, " + "world" // equals "hello, world"
  • 3 .求余運算符
    • 3.1 整數(shù)求余绣张,浮點數(shù)是不可以的
9 % 4 // 被2整除得到 1
-9 % 4 // 被-2整除得到 -1
    • 3.2 對負(fù)數(shù)求余時答渔,符號會被忽略
9 % -4 //  等價 9 % 4  被2整除得到 1
-9 % -4 // 等價 -9 % 4 被-2整除得到 1
  • 4 .一元運算符 - +
    • 4.1 一元負(fù)號運算符 -

在數(shù)值前面加 -,注意一元負(fù)號 - 寫在操作數(shù)之前侥涵,中間沒有空格沼撕。

let three = 3
let minusThree = -three // minusThree equals -3
let plusThree = -minusThree // plusThree equals 3, or "minus minus three"
4.1.png
    • 4.2 一元正號運算符 +

對變操作數(shù)沒任何影響,官方的意思是如果你加了 +會與-產(chǎn)生對稱美芜飘。

let minusSix = -6
let alsoMinusSix = +minusSix // alsoMinusSix equals -6
  • 5 .組合賦值運算符

表達(dá)式 a += 2 是 a = a + 2 的簡寫

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

復(fù)合賦值運算沒有返回值务豺,let b = a += 2 這類代碼是錯誤

  • 6 .比較運算符
    • 6.1 普通比較

等于(a == b)
不等于(a != b)
大于(a > b)
小于(a < b)
大于或等于(a >= b)
小于或等于(a <= b)

1 == 1 // true because 1 is equal to 1
2 != 1 // true because 2 is not equal to 1
2 > 1 // true because 2 is greater than 1
1 < 2 // true because 1 is less than 2
1 >= 1 // true because 1 is greater than or equal to 1
2 <= 1 // false because 2 is not less than or equal to 1

比較運算符常用于 if 語句

let name = "world"
if name == "world" {
print("hello, world")
} else {
print("I'm sorry \\(name), but I don't recognize you")
}
// Prints "hello, world", because name is indeed equal to "world".
    • 6.2 元祖比較(7個元素以內(nèi))

當(dāng)元組中的值可以比較時,你也可以使用這些運算符來比較它們的大小嗦明。例如笼沥,因為 Int 和 String 類型的值可以比較,所以類型為 (Int, String) 的元組也可以被比較娶牌。相反奔浅,Bool 不能被比較,也意味著存有布爾類型的元組不能被比較裙戏。
比較元組大小會按照從左到右乘凸、逐值比較的方式,直到發(fā)現(xiàn)有兩個值不等時停止累榜。如果所有的值都相等营勤,那么這一對元組我們就稱它們是相等的灵嫌。但是,元祖里的數(shù)據(jù)不能超過7個葛作,Swift 標(biāo)準(zhǔn)庫只能比較七個以內(nèi)元素的元組寿羞。

(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"
  • 7 .三目運算符

普通代碼

if question {
answer1
} else {
answer2
}

三目運算符

question ? answer1 : answer2

綜上:可讀性還是簡潔性,請開發(fā)者自己斟酌

  • 8 .空合運算符

空合運算符(a ?? b)將對可選類型 a 進(jìn)行空判斷赂蠢,如果 a 包含一個值就進(jìn)行解封绪穆,否則就返回一個默認(rèn)值 b。表達(dá)式 a 必須是 Optional 類型虱岂。默認(rèn)值 b 的類型必須要和 a 存儲值的類型保持一致玖院。
a ?? b用三目表達(dá)式表示為:a != nil ? a! : b

let defaultColorName = "red"
var userDefinedColorName: String? // defaults to nil
var colorNameToUse = userDefinedColorName ?? defaultColorName
// userDefinedColorName is nil, so colorNameToUse is set to the default of "red"

userDefinedColorName為Optional類型,userDefinedColorName ?? defaultColorName解封userDefinedColorNamenil,所以返回默認(rèn)值defaultColorName

  • 9 .區(qū)間運算符
    • 9.1 閉區(qū)間運算符

閉區(qū)間運算符(a...b)定義一個包含從 a 到 b(包括 a 和 b)的所有值的區(qū)間第岖。

for index in 1...5 {
print("\\(index) times 5 is \\(index * 5)")
}
// 1 times 5 is 5
// 2 times 5 is 10
// 3 times 5 is 15
// 4 times 5 is 20
// 5 times 5 is 25
    • 9.2 半開區(qū)間運算符

半開區(qū)間(a..<b)定義一個從 a 到 b **(不包括 b) **的區(qū)間难菌。

let names = ["Anna", "Alex", "Brian", "Jack"]
let count = names.count
for i in 0..<count {
    print("第 \\(i + 1) 個人叫 \\(names[i])")
}
// 第 1 個人叫 Anna
// 第 2 個人叫 Alex
// 第 3 個人叫 Brian
// 第 4 個人叫 Jack
  • 10 .邏輯運算
    • 10.1 邏輯非

邏輯非運算(!a)對一個布爾值取反,使得 true 變 false蔑滓,false 變 true郊酒。它是一個前置運算符,需緊跟在操作數(shù)之前键袱,且不加空格燎窘。

let allowedEntry = false
if !allowedEntry {
print("ACCESS DENIED")
}
// Prints "ACCESS DENIED"
    • 10.2 邏輯與

邏輯與(a && b)表達(dá)了只有 a 和 b 的值都為 true 時,整個表達(dá)式的值才會是 true蹄咖。只要任意一個值為 false褐健,整個表達(dá)式的值就為 false。事實上比藻,如果第一個值為 false铝量,那么是不去計算第二個值的。

let enteredDoorCode = true
let passedRetinaScan = false
if enteredDoorCode && passedRetinaScan {
print("Welcome!")
} else {
print("ACCESS DENIED")
}
// Prints "ACCESS DENIED"

在上面的例子中enteredDoorCode = true,enteredDoorCode && passedRetinaScan會繼續(xù)判斷passedRetinaScan银亲,因為passedRetinaScan = false慢叨,所以走 else 。

    • 10.3 邏輯或

邏輯或(a || b)是一個由兩個連續(xù)的 | 組成的中置運算符务蝠。a和b只要其中一個為true就為true拍谐,只有兩個為false的時候才是false。

let hasDoorKey = false
let knowsOverridePassword = true
if hasDoorKey || knowsOverridePassword {
print("Welcome!")
} else {
print("ACCESS DENIED")
}
// Prints "Welcome!"

上述代碼中hasDoorKey || knowsOverridePasswordknowsOverridePassword = true 所以表達(dá)式為true馏段。

    • 10.4 邏輯運算符組合計算

將上述的簡單邏輯組合使用

let enteredDoorCode = true
let passedRetinaScan = false
let hasDoorKey = false
let knowsOverridePassword = true
if enteredDoorCode && passedRetinaScan || hasDoorKey || knowsOverridePassword {
print("Welcome!")
} else {
print("ACCESS DENIED")
}
// Prints "Welcome!"

上述代碼中enteredDoorCode && passedRetinaScan || hasDoorKey || knowsOverridePassword 從左到右開始順序判斷即可轩拨。enteredDoorCode && passedRetinaScan = false-->enteredDoorCode && passedRetinaScan || hasDoorKey = false-->enteredDoorCode && passedRetinaScan || hasDoorKey || knowsOverridePassword = true

    • 10.5 .特殊的括號()

為了一個復(fù)雜表達(dá)式更容易讀懂,在合適的地方使用括號可以提高代碼的可讀性院喜。重寫10.4中的代碼亡蓉。

if (enteredDoorCode && passedRetinaScan) || hasDoorKey || knowsOverridePassword {
    print("Welcome!")
} else {
    print("ACCESS DENIED")
}
// 輸出 "Welcome!"

以上只是一些簡單的概念說(fan)明(yi),如有錯誤請指正喷舀,謝謝砍濒。Swift 3 學(xué)習(xí) 淋肾,后續(xù)會不斷更新。
如果你覺得我的文章對你有幫助請點喜歡哦爸邢,也可以關(guān)注我樊卓,每周至少一篇技術(shù)更新。
或者關(guān)注 我的專題 每周至少5篇高質(zhì)量文章收錄杠河,多謝支持碌尔。

一起學(xué)習(xí),一起進(jìn)步

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末券敌,一起剝皮案震驚了整個濱河市唾戚,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌待诅,老刑警劉巖颈走,帶你破解...
    沈念sama閱讀 217,406評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異咱士,居然都是意外死亡,警方通過查閱死者的電腦和手機轧钓,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評論 3 393
  • 文/潘曉璐 我一進(jìn)店門序厉,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人毕箍,你說我怎么就攤上這事弛房。” “怎么了而柑?”我有些...
    開封第一講書人閱讀 163,711評論 0 353
  • 文/不壞的土叔 我叫張陵文捶,是天一觀的道長。 經(jīng)常有香客問我媒咳,道長粹排,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,380評論 1 293
  • 正文 為了忘掉前任涩澡,我火速辦了婚禮顽耳,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘妙同。我一直安慰自己射富,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,432評論 6 392
  • 文/花漫 我一把揭開白布粥帚。 她就那樣靜靜地躺著胰耗,像睡著了一般。 火紅的嫁衣襯著肌膚如雪芒涡。 梳的紋絲不亂的頭發(fā)上柴灯,一...
    開封第一講書人閱讀 51,301評論 1 301
  • 那天卖漫,我揣著相機與錄音,去河邊找鬼弛槐。 笑死懊亡,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的乎串。 我是一名探鬼主播店枣,決...
    沈念sama閱讀 40,145評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼叹誉!你這毒婦竟也來了鸯两?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,008評論 0 276
  • 序言:老撾萬榮一對情侶失蹤长豁,失蹤者是張志新(化名)和其女友劉穎钧唐,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體匠襟,經(jīng)...
    沈念sama閱讀 45,443評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡虐沥,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,649評論 3 334
  • 正文 我和宋清朗相戀三年昭伸,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,795評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡务唐,死狀恐怖掂铐,靈堂內(nèi)的尸體忽然破棺而出埠巨,到底是詐尸還是另有隱情随闺,我是刑警寧澤,帶...
    沈念sama閱讀 35,501評論 5 345
  • 正文 年R本政府宣布淮阐,位于F島的核電站叮阅,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏泣特。R本人自食惡果不足惜浩姥,卻給世界環(huán)境...
    茶點故事閱讀 41,119評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望状您。 院中可真熱鬧及刻,春花似錦、人聲如沸竞阐。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽骆莹。三九已至颗搂,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間幕垦,已是汗流浹背丢氢。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評論 1 269
  • 我被黑心中介騙來泰國打工傅联, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人疚察。 一個月前我還...
    沈念sama閱讀 47,899評論 2 370
  • 正文 我出身青樓蒸走,卻偏偏與公主長得像,于是被迫代替她去往敵國和親貌嫡。 傳聞我的和親對象是個殘疾皇子比驻,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,724評論 2 354

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

  • 關(guān)于 Swift 重要這個文檔所包含的準(zhǔn)備信息, 是關(guān)于開發(fā)的 API 和技術(shù)的。這個信息可能會改變, 根據(jù)這個文...
    無灃閱讀 4,301評論 1 27
  • -1攝氏度~6攝氏度 晴 輕度污染 據(jù)說對面是個5星級酒店 覺得它好萌
    咸酥閱讀 135評論 2 0
  • 我希望能定格下喜歡的人岛抄,事别惦,物,留下美好時光夫椭。 今年的四月是特別的掸掸,,大學(xué)的時光又在逐漸減少了蹭秋,離畢業(yè)還有不到...
    亦沙意世界閱讀 287評論 0 1
  • “為什么一定要做標(biāo)識扰付?”我問道。 他看著我仁讨,有些奇怪的樣子:“因為企業(yè)必須要有標(biāo)識啊悯周。” “你能記得住多少企業(yè)標(biāo)識...
    木土君閱讀 354評論 0 0