Swift 基本運(yùn)算符

運(yùn)算符是用于檢查炼邀、更改或組合一個(gè)或多個(gè)值的特殊符號(hào)或短語债鸡。例如,加法運(yùn)算符(+)將兩個(gè)數(shù)字相加津肛,如在let i=1+2中所示葫辐,邏輯“與”運(yùn)算符(&&)將兩個(gè)布爾值合并搜锰,如enteredDoorCode && passedRetinaScan

Swift支持我們已經(jīng)從C等語言中了解到的運(yùn)算符耿战,并改進(jìn)了一些功能以消除常見的編碼錯(cuò)誤蛋叼。賦值運(yùn)算符(=)不返回值,以防止在使用相等運(yùn)算符(==)時(shí)錯(cuò)誤地使用它昆箕。算術(shù)運(yùn)算符(+鸦列、-租冠、*鹏倘、/、%等)檢測(cè)并禁止值溢出顽爹,以避免在處理大于或小于存儲(chǔ)類型值范圍的數(shù)字時(shí)出現(xiàn)意外結(jié)果纤泵。我們可以使用Swift的溢出運(yùn)算符選擇值溢出行為,如溢出運(yùn)算符中所述。

Swift還提供了在C中沒有的范圍運(yùn)算符捏题,例如a…<ba…b玻褪,作為表示值范圍的快捷方式。

本章介紹Swift中的常見運(yùn)算符公荧。高級(jí)運(yùn)算符涵蓋了Swift中的高級(jí)運(yùn)算符带射,并描述了如何定義自定義運(yùn)算符,并為我們自定義類型實(shí)現(xiàn)標(biāo)準(zhǔn)運(yùn)算符循狰。

術(shù)語

運(yùn)算符為一元窟社、二元或三元:

  • 一元運(yùn)算符操作單個(gè)值(如-a)。一元前綴運(yùn)算符緊跟在其目標(biāo)值前面(例如!b) 绪钥,并且一元后綴運(yùn)算符緊跟在它們的目標(biāo)值后面(例如c!)灿里。
  • 二元運(yùn)算符操作兩個(gè)目標(biāo)值(如2+3)并且是中綴,因?yàn)樗鼈兂霈F(xiàn)在兩個(gè)目標(biāo)值之間程腹。
  • 三元運(yùn)算符操作三個(gè)目標(biāo)值匣吊。和C一樣,Swift只有一個(gè)三元運(yùn)算符寸潦,三元條件運(yùn)算符(a ? b :c )色鸳。

運(yùn)算符影響的值是操作數(shù)。在表達(dá)式1+2中见转,+符號(hào)是一個(gè)二進(jìn)制運(yùn)算符缕碎,它的兩個(gè)操作數(shù)是值1和2。

賦值運(yùn)算符

賦值運(yùn)算符(a=b)用b值初始化或更新a值:

let b = 10
var a = 5
a = b
// a is now equal to 10

如果賦值的右側(cè)是具有多個(gè)值的元組池户,則其元素可以同時(shí)被分解為多個(gè)常量或變量:

let (x, y) = (1, 2)
// x is equal to 1, and y is equal to 2

與C和Objective-C中的賦值運(yùn)算符不同咏雌,Swift中的賦值運(yùn)算符本身不返回值。以下語句無效:

if x = y {
    // This is not valid, because x = y does not return a value.
}

此功能可防止在實(shí)際使用等于運(yùn)算符(==)時(shí)意外使用賦值運(yùn)算符(=)校焦。通過使if x=y無效赊抖,Swift可以幫助我們避免代碼中的此類錯(cuò)誤。

算術(shù)運(yùn)算符

Swift支持所有數(shù)字類型的四個(gè)標(biāo)準(zhǔn)算術(shù)運(yùn)算符:

  • 加法(+)
  • 減法(-)
  • 乘法(*)
  • 除法(/)
1 + 2       // equals 3
5 - 3       // equals 2
2 * 3       // equals 6
10.0 / 2.5  // equals 4.0

與C和Objective-C中的算術(shù)運(yùn)算符不同寨典,Swift算術(shù)運(yùn)算符默認(rèn)情況下不允許值溢出氛雪。我們可以通過使用Swift的溢出運(yùn)算符(如a &+ b)來選擇值溢出行為。請(qǐng)參見溢出運(yùn)算符耸成。
字符串串聯(lián)也支持加法運(yùn)算符:

"hello, " + "world"  // equals "hello, world"

余數(shù)運(yùn)算符

余數(shù)運(yùn)算符(a%b)計(jì)算出a中將容納多少個(gè)b的倍數(shù)报亩,并返回剩余的值(稱為余數(shù))。
注意
余數(shù)運(yùn)算符(%)在其他語言中也稱為模運(yùn)算符井氢。然而在Swift中弦追,嚴(yán)格地說,對(duì)于負(fù)數(shù)而言花竞,它是一個(gè)余數(shù)而不是一個(gè)模運(yùn)算劲件。

下面是余數(shù)運(yùn)算符的工作方式。要計(jì)算9%4,首先計(jì)算出9內(nèi)可容納多少個(gè)4:


截屏.png

在9中包含兩個(gè)4s零远,其余的是1(以橙色顯示)苗分。
在Swift中,這將被寫為:

9 % 4    // equals 1

要確定a%b的答案牵辣,%運(yùn)算符計(jì)算以下公式并返回余數(shù)作為其輸出:

a=(b * 因子)+余數(shù)

其中摔癣,因子是使得b匹配a的最大倍數(shù)纬向。
在這個(gè)方程中插入9和4得到:

9=(4 x 2)+1

當(dāng)計(jì)算-a的余數(shù)時(shí)供填,采用相同的方法:

-9 % 4   // equals -1

在方程中插入-9和4得到:

-9=(4 x -2)+-1

余數(shù)值為-1。
如果忽略負(fù)值b的符號(hào)罢猪,那么a%ba%-b總是給出相同的答案近她。

一元減號(hào)運(yùn)算符

可以使用前綴-,即一元減號(hào)運(yùn)算符來切換數(shù)值的符號(hào):

let three = 3
let minusThree = -three       // minusThree equals -3
let plusThree = -minusThree   // plusThree equals 3, or "minus minus three"

一元減號(hào)運(yùn)算符(-)直接在它所操作的值之前加上前綴膳帕,沒有任何空格粘捎。

一元加號(hào)運(yùn)算符

一元加號(hào)運(yùn)算符(+)只返回它所操作的值,沒有任何更改:

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

盡管一元加號(hào)運(yùn)算符實(shí)際上什么都不做危彩,但是當(dāng)一元減號(hào)運(yùn)算符用于負(fù)數(shù)時(shí)攒磨,可以使用它在代碼中為正數(shù)提供對(duì)稱性。

復(fù)合賦值運(yùn)算符

與C類似汤徽,Swift提供復(fù)合賦值運(yùn)算符娩缰,將賦值(=)與另一個(gè)操作結(jié)合起來。比如加法賦值運(yùn)算符(+=):

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

表達(dá)式a += 2a = a + 2的簡(jiǎn)寫形式谒府。加法和賦值被合并成一個(gè)操作符拼坎,同時(shí)執(zhí)行兩個(gè)任務(wù)也是有效的。

注意
復(fù)合賦值運(yùn)算符不返回值完疫。例如泰鸡,不能將b = a += 2寫入。

有關(guān)Swift標(biāo)準(zhǔn)庫提供的運(yùn)算符的信息壳鹤,請(qǐng)參閱運(yùn)算符聲明盛龄。

比較運(yùn)算符

Swift支持以下比較運(yùn)算符:

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

注意
Swift還提供了兩個(gè)標(biāo)識(shí)運(yùn)算符(===!==),用于測(cè)試兩個(gè)對(duì)象引用是否都引用同一個(gè)對(duì)象實(shí)例芳誓。有關(guān)詳細(xì)信息余舶,請(qǐng)參見標(biāo)識(shí)運(yùn)算符
每個(gè)比較運(yùn)算符都返回一個(gè)Bool值锹淌,以表示語句是否為真:

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

比較運(yùn)算符通常用于條件語句中匿值,例如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".

有關(guān)if語句的更多信息,請(qǐng)參見控制流葛圃。

如果兩個(gè)元組具有相同的類型和相同的元素?cái)?shù)量千扔,則可以對(duì)它們進(jìn)行比較。從左到右比較元組库正,每次比較一個(gè)值曲楚,直到比較發(fā)現(xiàn)兩個(gè)不相等的值。而這兩個(gè)值的比較結(jié)果決定了元組比較的總體結(jié)果褥符。如果所有元素都相等龙誊,那么元組本身就是相等的。例如:

(1, "zebra") < (2, "apple")   // true because 1 is less than 2; "zebra" and "apple" are not compared
(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"

在上面的示例中喷楣,我們可以在第一行看到從左到右的比較行為趟大。因?yàn)?小于2,(1, "zebra")被認(rèn)為小于(2, "apple")铣焊,而不考慮元組中的任何其他值逊朽。“zebra”比“apple”大并不重要曲伊,因?yàn)楸容^結(jié)果已經(jīng)由元組的第一個(gè)元素決定了叽讳。但是,當(dāng)元組的第一個(gè)元素相同時(shí)坟募,會(huì)比較它們的第二個(gè)元素岛蚤,這是在第二行和第三行代碼中發(fā)生的情況。

只有當(dāng)元組中的每個(gè)元素都可以應(yīng)用運(yùn)算符時(shí)懈糯,元組才能用給定運(yùn)算符進(jìn)行比較涤妒。例如下面的代碼所示,我們可以比較兩個(gè)類型(String赚哗,Int)的元組她紫,因?yàn)镾tring和Int值都可以使用<運(yùn)算符進(jìn)行比較。相反屿储,類型(String犁苏,Bool)的兩個(gè)元組不能用<運(yùn)算符進(jìn)行比較,因?yàn)?code><運(yùn)算符不能應(yīng)用于Bool值扩所。

("blue", -1) < ("purple", 1)        // OK, evaluates to true
("blue", false) < ("purple", true)  // Error because < can't compare Boolean values

注意
Swift標(biāo)準(zhǔn)庫包含了用于少于7個(gè)元素的元組比較運(yùn)算符围详。要將元組與七個(gè)或更多元素進(jìn)行比較,必須自己實(shí)現(xiàn)比較運(yùn)算符祖屏。

三元條件運(yùn)算符

三元條件運(yùn)算符是由三部分組成的特殊運(yùn)算符助赞,它的形式是疑問句 ? 答案1 : 答案2。它是根據(jù)問題是真是假來計(jì)算兩個(gè)表達(dá)式之一的快捷方式袁勺。如果question為true雹食,它計(jì)算answer1并返回其值;否則期丰,它計(jì)算answer2并返回其值群叶。

三元條件運(yùn)算符是以下代碼的簡(jiǎn)寫:

if question {
    answer1
} else {
    answer2
}

下面是一個(gè)計(jì)算表的行高的示例吃挑。如果行有標(biāo)題,行高應(yīng)比內(nèi)容高50點(diǎn)街立,如果行沒有標(biāo)題舶衬,行高應(yīng)比內(nèi)容高20點(diǎn):

let contentHeight = 40
let hasHeader = true
let rowHeight = contentHeight + (hasHeader ? 50 : 20)
// rowHeight is equal to 90

上面的例子是下面代碼的速寫:

let contentHeight = 40
let hasHeader = true
let rowHeight: Int
if hasHeader {
    rowHeight = contentHeight + 50
} else {
    rowHeight = contentHeight + 20
}
// rowHeight is equal to 90

第一個(gè)示例使用三元條件運(yùn)算符,意味著行高可以在一行代碼上設(shè)置為正確的值赎离,這比第二個(gè)示例中使用的代碼更簡(jiǎn)潔逛犹。
三元條件運(yùn)算符提供了一個(gè)有效的快捷方式,來決定要計(jì)算兩個(gè)表達(dá)式中的哪一個(gè)梁剔。不過虽画,要小心使用三元條件運(yùn)算符。如果過度使用荣病,它的簡(jiǎn)潔性會(huì)導(dǎo)致代碼難以閱讀码撰。我們應(yīng)該避免將三元條件運(yùn)算符的多個(gè)實(shí)例組合到一個(gè)復(fù)合語句中。

nil聚合運(yùn)算符

nil聚合運(yùn)算符(a ?? b) 个盆,如果可選項(xiàng)a包含值灸拍,則將其展開;如果a為nil砾省,則返回默認(rèn)值b鸡岗。表達(dá)式a始終是可選類型。表達(dá)式b必須與存儲(chǔ)在a中的類型匹配编兄。
nil聚合運(yùn)算符是以下代碼的簡(jiǎn)寫:

a != nil ? a! : b

上面的代碼使用三元條件運(yùn)算符和強(qiáng)制展開(a!)轩性,來在當(dāng)a不為nil時(shí),訪問包裝在a中的值狠鸳,否則當(dāng)a為nil時(shí)揣苏,就返回b。nil聚合運(yùn)算符提供了一種更優(yōu)雅的方式件舵,以簡(jiǎn)潔易讀的形式封裝這種條件檢查和展開卸察。

注意
如果a的值不是nil,則不計(jì)算b的值铅祸。這就是所謂的短路評(píng)估坑质。

下面的示例使用nil聚合運(yùn)算符在默認(rèn)顏色名稱和可選的用戶定義顏色名稱之間進(jìn)行選擇:

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變量定義為可選字符串,默認(rèn)值為nil临梗。因?yàn)?code>userDefinedColorName是可選類型涡扼,所以可以使用nil聚合運(yùn)算符來考慮其值。在上面的示例中盟庞,nil聚合運(yùn)算符用來確定colorNameToUse這個(gè)字符串變量的初始值吃沪。因?yàn)?code>userDefinedColorName為nil,所以表達(dá)式userDefinedColorName ?? DefaultColorName返回DefaultColorName"red"的值什猖。
如果將非nil值賦給userDefinedColorName票彪,并再次執(zhí)行nil聚合運(yùn)算符檢查红淡,則將使用包裝在userDefinedColorName中的值,而不是默認(rèn)值:

userDefinedColorName = "green"
colorNameToUse = userDefinedColorName ?? defaultColorName
// userDefinedColorName is not nil, so colorNameToUse is set to "green"

范圍運(yùn)算符

Swift包含幾個(gè)范圍運(yùn)算符降铸,它們是表示值范圍的快捷方式在旱。

閉合范圍運(yùn)算符

閉合范圍運(yùn)算符(a…b)定義從a到b的范圍,并包括值a和b垮耳。a的值不得大于b颈渊。
在要使用所有值的范圍內(nèi)進(jìn)行迭代時(shí)遂黍,閉合范圍運(yùn)算符非常有用终佛,例如for-in循環(huán):

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

有關(guān)in循環(huán)的更多信息,請(qǐng)參見控制流雾家。

半開范圍運(yùn)算符

半開范圍運(yùn)算符(a…<b)定義了從a到b的范圍铃彰,但不包括b。它被稱為半開范圍芯咧,因?yàn)樗谝粋€(gè)值牙捉,但不包含最終值。與閉合范圍運(yùn)算符一樣敬飒,a的值不得大于b邪铲。如果a的值等于b,則生成的范圍就為空无拗。

半開范圍在處理從0開始的列表(如數(shù)組)時(shí)特別有用带到,在數(shù)組中,將列表從0計(jì)算到(但不包括)列表的長(zhǎng)度非常有用:

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

請(qǐng)注意英染,數(shù)組包含四個(gè)項(xiàng)揽惹,但0..<count最多只能計(jì)算3(數(shù)組中最后一個(gè)項(xiàng)的索引),因?yàn)樗前腴_范圍四康。有關(guān)數(shù)組的詳細(xì)信息搪搏,請(qǐng)參見數(shù)組

單邊范圍

閉合范圍運(yùn)算符具有另一種單邊形式闪金,用于在一個(gè)方向上盡量連續(xù)的范圍疯溺,例如,從索引2到數(shù)組結(jié)尾的數(shù)組的所有元素的范圍哎垦。在這些情況下喝检,可以忽略范圍運(yùn)算符一側(cè)的值。這種范圍稱為單邊范圍撼泛,因?yàn)檫\(yùn)算符只有一側(cè)的值挠说。例如:

for name in names[2...] {
    print(name)
}
// Brian
// Jack

for name in names[...2] {
    print(name)
}
// Anna
// Alex
// Brian

半開范圍操作符也有一個(gè)單邊形式,只寫它的最終值愿题。就像兩邊都包含一個(gè)值一樣损俭,這個(gè)最終值不在包含范圍內(nèi)蛙奖。例如:

for name in names[..<2] {
    print(name)
}
// Anna
// Alex

單側(cè)范圍可以在其他上下文中使用,而不僅僅是在下標(biāo)中杆兵。我們不能在忽略第一個(gè)值的這樣的單邊范圍內(nèi)迭代雁仲,因?yàn)檫@樣我們就不清楚迭代應(yīng)該從何處開始。我們可以在忽略其最終值的這樣的單邊范圍上進(jìn)行迭代琐脏;但是攒砖,由于該范圍可能會(huì)無限期地繼續(xù),請(qǐng)確保為循環(huán)添加了顯式結(jié)束條件日裙。我們還可以檢查單邊范圍是否包含特定值吹艇,如下面的代碼所示。

let range = ...5
range.contains(7)   // false
range.contains(4)   // true
range.contains(-1)  // true

邏輯運(yùn)算符

邏輯運(yùn)算符修改或組合布爾邏輯值true和false昂拂。Swift支持C語言中的三種標(biāo)準(zhǔn)邏輯運(yùn)算符:

  • 邏輯非(!a
  • 邏輯與(a && b
  • 邏輯或(a || b

邏輯非運(yùn)算符

邏輯非運(yùn)算符(!a) 反轉(zhuǎn)布爾值受神,使true變?yōu)閒alse,false變?yōu)閠rue格侯。
邏輯非運(yùn)算符是一個(gè)前綴運(yùn)算符鼻听,緊跟在它所操作的值之前,沒有任何空格联四〕挪辏可以將其解讀為“非a”,如以下示例所示:

let allowedEntry = false
if !allowedEntry {
    print("ACCESS DENIED")
}
// Prints "ACCESS DENIED"

如果!allowedEntry可以讀作“if not allowed entry”朝墩。只有當(dāng)“not allowed entry”為true時(shí)醉拓,即allowedEntry為false時(shí),才執(zhí)行下一行鱼辙。
在本例中廉嚼,仔細(xì)選擇布爾常量和變量名有助于保持代碼可讀性和簡(jiǎn)潔性,同時(shí)避免雙重否定或混淆邏輯語句倒戏。

邏輯與運(yùn)算符

邏輯與運(yùn)算符(a && b)創(chuàng)建邏輯表達(dá)式怠噪,其中兩個(gè)值都必須為真,整個(gè)表達(dá)式才能為真杜跷。
如果其中一個(gè)值為false傍念,則整個(gè)表達(dá)式也將為false。實(shí)際上葛闷,如果第一個(gè)值為false憋槐,第二個(gè)值甚至不會(huì)被計(jì)算,因?yàn)樗豢赡苁拐麄€(gè)表達(dá)式等于true淑趾。這就是所謂的短路評(píng)估阳仔。
本例考慮兩個(gè)Bool值,僅當(dāng)兩個(gè)值都為真時(shí)才允許訪問:

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

邏輯或運(yùn)算符

邏輯或運(yùn)算符(a || b)是由兩個(gè)相鄰的管道字符組成的中綴運(yùn)算符扣泊。我們可以使用它來創(chuàng)建邏輯表達(dá)式近范,其中只有兩個(gè)值中的一個(gè)為真嘶摊,整個(gè)表達(dá)式就能為真。
與上面的邏輯“與”運(yùn)算符一樣评矩,邏輯“或”運(yùn)算符使用短路評(píng)估來考慮其表達(dá)式叶堆。如果邏輯或表達(dá)式的左側(cè)為true,則不計(jì)算右側(cè)斥杜,因?yàn)樗荒芨恼麄€(gè)表達(dá)式的結(jié)果虱颗。
在下面的示例中,第一個(gè)Bool值(hasDoorKey)為false蔗喂,但第二個(gè)值(knowsOverridePassword)為true忘渔。因?yàn)槠渲幸粋€(gè)值為true,所以整個(gè)表達(dá)式的計(jì)算結(jié)果也為true弱恒,并且允許訪問:

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

組合邏輯運(yùn)算符

我們可以組合多個(gè)邏輯運(yùn)算符以創(chuàng)建更長(zhǎng)的復(fù)合表達(dá)式:

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

本例使用多個(gè)&&||運(yùn)算符創(chuàng)建較長(zhǎng)的復(fù)合表達(dá)式辨萍。但是棋恼,&&||運(yùn)算符仍然只對(duì)兩個(gè)值進(jìn)行操作返弹,因此這實(shí)際上是三個(gè)較小的表達(dá)式鏈接在一起。這個(gè)例子可以理解為:
如果我們輸入了正確的門代碼并通過了視網(wǎng)膜掃描爪飘,或者我們有一把有效的門鑰匙义起,或者如果我們知道緊急超控密碼,那么允許進(jìn)入师崎。
根據(jù)enteredDoorCode默终、passedRetinaScan和hasDoorKey的值,前兩個(gè)子表達(dá)式為false犁罩。但是齐蔽,knowsOverridePassword是true的,因此整個(gè)復(fù)合表達(dá)式的計(jì)算結(jié)果仍然是true床估。

注意
Swift邏輯運(yùn)算符&&||是左關(guān)聯(lián)的含滴,這意味著具有多個(gè)邏輯運(yùn)算符的復(fù)合表達(dá)式首先計(jì)算最左邊的子表達(dá)式。

顯式括號(hào)

有時(shí)丐巫,在不嚴(yán)格需要括號(hào)的情況下包含括號(hào)是很有用的谈况,這樣可以使復(fù)雜表達(dá)式的所要表達(dá)的意思更易于閱讀。在上面的door access示例中递胧,在復(fù)合表達(dá)式的第一部分周圍添加括號(hào)以明確其意圖非常有用:

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

括號(hào)清楚地表明碑韵,前兩個(gè)值被認(rèn)為是整個(gè)邏輯中一個(gè)單獨(dú)的可能狀態(tài)的一部分。復(fù)合表達(dá)式的輸出并沒有改變缎脾,但總體意圖對(duì)讀者來說更為清晰祝闻。易讀性總是優(yōu)于簡(jiǎn)潔性;我們可以在有助于表達(dá)意圖的地方使用括號(hào)遗菠。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末联喘,一起剝皮案震驚了整個(gè)濱河市屉栓,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌耸袜,老刑警劉巖友多,帶你破解...
    沈念sama閱讀 206,126評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異堤框,居然都是意外死亡域滥,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門蜈抓,熙熙樓的掌柜王于貴愁眉苦臉地迎上來启绰,“玉大人,你說我怎么就攤上這事沟使∥桑” “怎么了?”我有些...
    開封第一講書人閱讀 152,445評(píng)論 0 341
  • 文/不壞的土叔 我叫張陵腊嗡,是天一觀的道長(zhǎng)着倾。 經(jīng)常有香客問我,道長(zhǎng)燕少,這世上最難降的妖魔是什么卡者? 我笑而不...
    開封第一講書人閱讀 55,185評(píng)論 1 278
  • 正文 為了忘掉前任,我火速辦了婚禮客们,結(jié)果婚禮上崇决,老公的妹妹穿的比我還像新娘。我一直安慰自己底挫,他們只是感情好恒傻,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,178評(píng)論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著建邓,像睡著了一般盈厘。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上涝缝,一...
    開封第一講書人閱讀 48,970評(píng)論 1 284
  • 那天扑庞,我揣著相機(jī)與錄音,去河邊找鬼拒逮。 笑死罐氨,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的滩援。 我是一名探鬼主播栅隐,決...
    沈念sama閱讀 38,276評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了租悄?” 一聲冷哼從身側(cè)響起谨究,我...
    開封第一講書人閱讀 36,927評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎泣棋,沒想到半個(gè)月后胶哲,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,400評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡潭辈,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,883評(píng)論 2 323
  • 正文 我和宋清朗相戀三年鸯屿,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片把敢。...
    茶點(diǎn)故事閱讀 37,997評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡寄摆,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出修赞,到底是詐尸還是另有隱情婶恼,我是刑警寧澤,帶...
    沈念sama閱讀 33,646評(píng)論 4 322
  • 正文 年R本政府宣布柏副,位于F島的核電站勾邦,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏搓扯。R本人自食惡果不足惜检痰,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,213評(píng)論 3 307
  • 文/蒙蒙 一包归、第九天 我趴在偏房一處隱蔽的房頂上張望锨推。 院中可真熱鬧,春花似錦公壤、人聲如沸换可。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,204評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽沾鳄。三九已至,卻和暖如春确憨,著一層夾襖步出監(jiān)牢的瞬間译荞,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評(píng)論 1 260
  • 我被黑心中介騙來泰國(guó)打工休弃, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留吞歼,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,423評(píng)論 2 352
  • 正文 我出身青樓塔猾,卻偏偏與公主長(zhǎng)得像篙骡,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,722評(píng)論 2 345

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

  • 運(yùn)算符是檢查糯俗、改變尿褪、合并值的特殊符號(hào)或短語。例如得湘,加號(hào)+將兩個(gè)數(shù)相加(如let i = 1 + 2)杖玲。更復(fù)雜的運(yùn)算...
    窮人家的孩紙閱讀 14,950評(píng)論 3 6
  • Swift 的運(yùn)算符和C以及OC的運(yùn)算符相比并沒有太大的變化,但是有很好的補(bǔ)充淘正。 賦值運(yùn)算符(因?yàn)樵M的使用更加豐...
    雪_晟閱讀 681評(píng)論 0 0
  • 簡(jiǎn)介 Swift 支持大部分標(biāo)準(zhǔn) C 語言的運(yùn)算符天揖,且為了減少常見編碼錯(cuò)誤做了部分改進(jìn)。 如:賦值符(=)不再有返...
    DevXue閱讀 354評(píng)論 0 0
  • Swift中文文檔 運(yùn)算符分為一元跪帝、二元和三元運(yùn)算符 一今膊、賦值運(yùn)算符 賦值運(yùn)算符: = 例如: (a = b), ...
    伯wen閱讀 653評(píng)論 0 0
  • 術(shù)語 運(yùn)算符分為一元斑唬、二元和三元運(yùn)算符: 一元運(yùn)算符對(duì)單一操作對(duì)象操作(如 -a)。一元運(yùn)算符分前置運(yùn)算符和后置運(yùn)...
    CoderLGL閱讀 628評(píng)論 0 1