swift簡單總結(jié)(十)—— 運算符

版本記錄

版本號 時間
V1.0 2017.07.24

前言

我是swift2.0的時候開始接觸的豆茫,記得那時候還不是很穩(wěn)定伸蚯,公司的項目也都是用oc做的撬码,并不對swift很重視维蒙,我自己學(xué)了一段時間掰吕,到現(xiàn)在swift3.0+已經(jīng)出來了,自己平時也不寫颅痊,忘記的也差不多了殖熟,正好項目這段時間已經(jīng)上線了,不是很忙斑响,我就可以每天總結(jié)一點了菱属,希望對自己對大家有所幫助。在總結(jié)的時候我會對比oc進(jìn)行說明舰罚,有代碼的我會給出相關(guān)比對代碼纽门。
1. swift簡單總結(jié)(一)—— 數(shù)據(jù)簡單值和類型轉(zhuǎn)換
2. swift簡單總結(jié)(二)—— 簡單值和控制流
3. swift簡單總結(jié)(三)—— 循環(huán)控制和函數(shù)
4. swift簡單總結(jié)(四)—— 函數(shù)和類
5. swift簡單總結(jié)(五)—— 枚舉和結(jié)構(gòu)體
6. swift簡單總結(jié)(六)—— 協(xié)議擴(kuò)展與泛型
7. swift簡單總結(jié)(七)—— 數(shù)據(jù)類型
8. swift簡單總結(jié)(八)—— 別名、布爾值與元組
9. swift簡單總結(jié)(九)—— 可選值营罢、斷言和運算符

賦值運算符

這個就很好理解了赏陵,就是給一個常量或者變量賦值,下面我們看一下oc中賦值運算符的使用。

    NSInteger number = 0;
    NSString *nickNameStr = @"小明";

下面看一下swift中賦值運算符的使用情況蝙搔。

//賦值運算符
let number = 10
var nickName = "小明"

swift中賦值運算的右邊可以是一個元組缕溉, 它的元素可以馬上被分解成多個常量或者變量。

let (x, y) = (1, 2)
print(x)
print(y)

下面看輸出結(jié)果

1
2

可見吃型,xy被自動的對應(yīng)1和2证鸥。

注意:與coc完全不同的是,它們的賦值如果用在if語句中表示的就是BOOL屬性勤晚,而且一定是YES敌土,但是swift中賦值操作不會返回任何值,下面的代碼是錯誤的运翼。

//這句是錯誤的返干,x = y不會返回任何值
if x = y {

}

這么規(guī)定有一個好處就是,防止你把==誤寫作=血淌。


算術(shù)運算符

oc中一樣矩欠,swift支持算術(shù)運算符,支持基本的四則算術(shù)運算悠夯。

  • +
  • -
  • *
  • /

c語言和oc不同的是:

  • swift默認(rèn)情況下不允許在數(shù)值運算中出現(xiàn)溢出的情況癌淮,你可以使用swift溢出運算符實現(xiàn)溢出運算如a &+ b
  • +運算符可以用于字符串的拼接沦补,看下邊代碼乳蓄。
let greetingStr = "hello " + " world"
print(greetingStr)

下面看輸出結(jié)果

hello  world
  • 兩個character值或一個String和一個character值相加生成新的String類型的值。

求余運算符

ocswift中都有求余運算符夕膀,也可以叫取模運算虚倒。我們看下面swift中的幾種情況。

  • 對負(fù)數(shù)求余产舞,如果有一個參數(shù)為負(fù)數(shù)魂奥,那么負(fù)數(shù)的符號會被忽略。也就是說a % ba % -b的結(jié)果是一樣的易猫。
  • oc中不同的是耻煤,swift中可以對浮點數(shù)進(jìn)行求余,下面看代碼准颓。
let number1 = 8.0
let number2 = 2.5
let result = number1.truncatingRemainder(dividingBy: number2)
print(result)

下面看結(jié)果

0.5

這里需要注意的是哈蝇,%求余在3.0版本已經(jīng)不可以直接使用了,必須使用truncatingRemainder方法攘已,這個方法也只能浮點型的數(shù)字調(diào)用炮赦,我用let number1 = 8去調(diào)用會提示沒有這個類型方法,將8修改成8.0就可以了贯被。


自增和自減操作

這個就很簡單了眼五,但是用的很廣妆艘,在數(shù)組遍歷或者計時器等很多方面都會用到,單純語法并不難看幼,coc中都有這個的用法批旺,我們就說一下很常見的++aa++的問題吧。

需要注意的是诵姜,在swift 3.0++a已經(jīng)不能用了汽煮,換成的是 a += 1

var a = 0
a += 1
let b = a
print(a)
print(b)

下面看輸出結(jié)果

1
1

大家記住++a已經(jīng)被廢棄了,就可以了棚唆。


一元正號運算符和一元負(fù)號運算符

這個都是一元運算符暇赤,作用就是改變正負(fù)號使用的,沒什么說的宵凌,略過了鞋囊。


比較運算符

比較運算符屬于復(fù)合運算符,是將一個基本運算符集合在一起瞎惫,表達(dá)的一種全新的邏輯運算溜腐,比較運算符包含下面幾種。

  • 等于 a == b
  • 不等于a != b
  • 大于a > b
  • 小于a < b
  • 大于等于a >= b
  • 小于等于a <= b
let a = 1
let b = 1
if a == b {
    print("they are same")
}

下面看輸出結(jié)果

they are same

比較運算符會返回一boolean值瓜喇。


三目運算符

ocswift中都有三目運算符挺益,其實它的作用和if判斷是等價的,可以優(yōu)化if判斷乘寒,它的原型其實就是問題 望众?答案1 : 答案2

我們先看一下oc中三目運算符的使用伞辛。

NSInteger lastPage = 1;
BOOL isLastPage = lastPage == 1 ? @"YES" : @"NO";
NSLog(@"isLastPage = %d",isLastPage);

下面看輸出結(jié)果

2017-07-24 11:05:53.678670+0800 JJOC[4930:1521314] isLastPage = 1

下面我們就看下swift中的三目運算符烂翰。

let lastPage = 1;
let isLastPage = lastPage == 1 ? "YES" : "NO";
print(isLastPage)

下面看輸出結(jié)果

YES

空合運算符 Nil Coalescing Operator

空合運算符是swift中獨有的,oc中并沒有這個運算符始锚,一般寫作a ?? b刽酱,它的含義就是先對a進(jìn)行空判斷,如果a包含一個值就進(jìn)行解封瞧捌,否則就返回一個默認(rèn)值b,這個運算符有兩個條件:

  • a必須是Optional類型润文。
  • 默認(rèn)值b的類型必須要和a存儲值得類型保持一致姐呐。

其實,空合運算符是對下面代碼的簡寫典蝌。

a != nil ? a! : b

上面代碼的意思是:當(dāng)可選類型a不為空時曙砂,進(jìn)行強(qiáng)制解封a!訪問a中的值,反之骏掀,當(dāng)a中的值為空時鸠澈,返回默認(rèn)值b柱告,空合運算符提供了一種更改的條件判斷和解包行為。

注意:這里a如果非空笑陈,那么值b將不會被估值际度,這就是短路求值。

下面看一下代碼涵妥。

let defaultColor = "black"
var userColor : String?
var colorToUse = userColor ?? defaultColor
print(colorToUse)

userColor = "green"
colorToUse = userColor ?? defaultColor
print(colorToUse)

下面看輸出結(jié)果

black
green


區(qū)間運算符

區(qū)間運算符包括兩種乖菱,一種是閉區(qū)間運算符a...b,表示的是大于等于a小于等于b蓬网,另外一種就是半開區(qū)間運算符窒所,a..<b表示的是大于等于a小于boc中是沒有這個運算符的帆锋,oc中表達(dá)這個邏輯只能用>=<=等其他關(guān)系運算符結(jié)合判斷吵取。

下面我們看一下代碼。

var sum = 0
for index in 0...3 {
    sum += index
}
print(sum)

var sum1 = 0
for index in 0..<3 {
    sum1 += index
}
print(sum1)

下面看一下輸出結(jié)果

6
3


邏輯運算符

這個和oc中是一樣的锯厢,包括邏輯與海渊、邏輯或邏輯非

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

它們之間的邏輯關(guān)系就不多說了哲鸳,其實很簡單臣疑,在我們學(xué)習(xí)c的時候就已經(jīng)知道了。我們需要注意的是他們之間的優(yōu)先級徙菠,非的優(yōu)先級是最高的讯沈,其次是另外兩個,如果邏輯很復(fù)雜的時候婿奔,為了讀起來清晰缺狠,一般要加幾個括號。

后記

這篇主要說的就是幾種運算符萍摊,相對比較簡單挤茄,很多和oc中是一樣的,只有個別的一兩個不一樣冰木,大家看起來也不會很吃力穷劈,希望大家能喜歡~~~

滕王閣序
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市踊沸,隨后出現(xiàn)的幾起案子歇终,更是在濱河造成了極大的恐慌,老刑警劉巖逼龟,帶你破解...
    沈念sama閱讀 211,884評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件评凝,死亡現(xiàn)場離奇詭異,居然都是意外死亡腺律,警方通過查閱死者的電腦和手機(jī)奕短,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,347評論 3 385
  • 文/潘曉璐 我一進(jìn)店門宜肉,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人翎碑,你說我怎么就攤上這事谬返。” “怎么了杈女?”我有些...
    開封第一講書人閱讀 157,435評論 0 348
  • 文/不壞的土叔 我叫張陵朱浴,是天一觀的道長。 經(jīng)常有香客問我达椰,道長翰蠢,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,509評論 1 284
  • 正文 為了忘掉前任啰劲,我火速辦了婚禮梁沧,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘蝇裤。我一直安慰自己廷支,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,611評論 6 386
  • 文/花漫 我一把揭開白布栓辜。 她就那樣靜靜地躺著恋拍,像睡著了一般。 火紅的嫁衣襯著肌膚如雪藕甩。 梳的紋絲不亂的頭發(fā)上施敢,一...
    開封第一講書人閱讀 49,837評論 1 290
  • 那天,我揣著相機(jī)與錄音狭莱,去河邊找鬼僵娃。 笑死,一個胖子當(dāng)著我的面吹牛腋妙,可吹牛的內(nèi)容都是我干的默怨。 我是一名探鬼主播,決...
    沈念sama閱讀 38,987評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼骤素,長吁一口氣:“原來是場噩夢啊……” “哼匙睹!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起谆甜,我...
    開封第一講書人閱讀 37,730評論 0 267
  • 序言:老撾萬榮一對情侶失蹤垃僚,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后规辱,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,194評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡栽燕,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,525評論 2 327
  • 正文 我和宋清朗相戀三年罕袋,在試婚紗的時候發(fā)現(xiàn)自己被綠了改淑。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,664評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡浴讯,死狀恐怖朵夏,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情榆纽,我是刑警寧澤仰猖,帶...
    沈念sama閱讀 34,334評論 4 330
  • 正文 年R本政府宣布,位于F島的核電站奈籽,受9級特大地震影響饥侵,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜衣屏,卻給世界環(huán)境...
    茶點故事閱讀 39,944評論 3 313
  • 文/蒙蒙 一躏升、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧狼忱,春花似錦膨疏、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,764評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至窘俺,卻和暖如春饲帅,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背批销。 一陣腳步聲響...
    開封第一講書人閱讀 31,997評論 1 266
  • 我被黑心中介騙來泰國打工洒闸, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人均芽。 一個月前我還...
    沈念sama閱讀 46,389評論 2 360
  • 正文 我出身青樓丘逸,卻偏偏與公主長得像,于是被迫代替她去往敵國和親掀宋。 傳聞我的和親對象是個殘疾皇子深纲,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,554評論 2 349

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