運算符是指一個特殊的符号,能夠用來檢視。更改值或者相加。比方說加法運算符+能夠講兩個數字加起來。
另一些複雜的樣例比方邏輯與&&或者自增++。Swift支援C中得大部分運算符,而且增加了一些增強的特性來降低代碼中的錯誤。指派預算符=不會傳回值。這樣就避免了在應該使用比較運算符==的地方誤用=。數學運算符(加減乘除模)會做溢出推斷,這樣避免了值溢出的時候出現的奇怪現象。你能夠選擇使用Swift提供的溢出運算來同意溢出。非常後面的時候會有介紹。
Swift浮點數是能夠進行求模運算的。C是不能夠的。Swift還提供了範圍符号(1..4和4...6)。
這張還是介紹一些通用的操作符,特殊操作符在後面Swift特殊操作符裡面介紹。還會介紹怎麼自己定義操作符或者為自己定義類實作操作符運算。
1.術語
運算符能夠是一進制、二進制或者三元的。
一進制運算符僅僅對單個值進行操作。一進制運算符通常都緊貼這操作對象。前後都有。
二進制運算符對像個值進行操作。一般出如今兩個操作對象中間。
三元運算符涉及三個對象,并且Swift語言裡面僅僅有一個三元操作符。(a ? b: c)毫無疑問。
運算符影響的值叫運算元。
對于表達式1+2來說。加号(+)是個二進制運算符,他的兩個運算元各自是1跟2。
指派運算符
指派運算符(a = b)使用b的值來初始化或者更新a的值。
假設指派運算符右邊是個元組,元組中的值能夠一次性被解析出來指派給多個變量或常量。
跟C或者OC的指派不一樣的是,Swift的指派運算不傳回值。像以下這樣就是錯的
這個特性防止了該用==的地方使用=。編譯器對if x= y報錯。你就能避免這類錯誤了。
2.數學運算符
Swift提供四個标準數學運算符支援多有的數字類型。
加減乘除
可是預設情況下Swift數學運算符是不同意溢出的。
你能夠通過溢出運算符來同意溢出比方說 a &+ b;
加号運算符還能用來連接配接字元串 比方"hello," + "china"結果是“hello,china”。兩個字元,或者一個字元跟一個字元串,都能相加得到字元串。(以下樣例裡面字元用的是表情符,不windows應該是不支援吧,我猜的。)
求餘運算符
求餘運算(a % b)是指a = n*b+c。n是整數,c要比b小,c就是結果。
NOTE 求餘運算與其它語言裡面的求模運算非常想。可是Swift裡面求餘還能夠是負數,是以還是叫求餘運算。
這裡有個圖示說明求餘怎麼回事。增加要計算9%4。首先要計算9裡面能夠放幾個4:
4
1
2
3
5
6
7
8
9
9裡面能夠放得下2個4。剩下的就是1了。
要計算a%b的結果,%運算使用公式a = (b*someMultiplier) + remainder,而且用remainder作為傳回值。someMultiplier是a中能容得下b的最大數量。帶入上面的樣例就是9 = (4*2) + 1
當a是負數的時候也是一樣的方法。
-9%4 等于-1。代入公式就是 -9 = (4*-2)+(-1),結果是就是-1。假設b是負數的話。b的負号都會呗忽略,是以a%b和a%-b的結果總是一樣的。
浮點數求餘運算
Swift求餘運算還能用于浮點數比方8%2.5結果是0.5。
實在太簡單了又不好翻譯這幾句解說就算了。
自增和自減運算符
跟C一樣。Swift提供了自增(++)和自減(--)運算符,用來友善的使某個值加1或者減1。這兩個操作符能夠用于整數或者浮點數。
每次你調用++i的時候i的值都會加1。++i事實上就是i = i+1的縮寫。一樣的道理,--i就是i = i -1的縮寫。
++和--既能用作字首也能用作字尾。++i和i++都是正确地,--i和i--也是正确的(還用說嗎,跟鳥哥一樣啰嗦啊)
注意這兩個操作符既改動i的值,最後還傳回一個值,假設你僅僅是想改變i的值。能夠忽略最後的傳回值,可是當你要使用傳回值的時候要注意字首跟字尾的差别。
假設使用字首,傳回的是加1前的值,使用字尾傳回的是加1後的值。比如
上面這個樣例中,let b = ++a先讓a的值加1。然後才傳回a的值。
也就解釋了為什麼a跟b的值都是1了。
可是let c = a++是先傳回a的值然後才給a加1的。是以說這個完了以後a是2,而c等于1。
這裡說建議盡量都是++i和--i的形式,我在JAVA裡面都是寫i++啊。
一進制負運算符
數字的符号能夠用-來改變。-就是個一進制運算符
-直接放在操作對象的前面。中間不要有不論什麼空格。
一進制正運算符
+号運算符僅僅是傳回操作對象的值,不會有不論什麼改變。
盡管說加号不錯不論什麼改變,可是假設你代碼裡給負數加負号,給正數加正号就顯得對稱多了。
複合指派運算
Swift也提供了複合指派運算。用來結合指派運算符和其它的運算符。典型的樣例就是+=了
a += 2就是a = a+2的縮寫。
兩種方式僅僅是第一種将兩個運算符結合到一起了。兩種方式運作時間是一樣的。
NOTE 複合運算符沒有傳回值。比方說不能使用let b = a+=2。
這個是跟自增自減運算不一樣的地方。
3.比較運算符
Swift支援C全部的比較運算符,比較相等。比較不相等,大于,小于。大于等于,小于等于
NOTE Swift還提供了兩個身份比較運算符===和。==,用來比較是兩個對象的引用還是同一個對象的引用。
每一個比較運算符傳回值都是Bool,表示這個表達式是不是正确的。
比較運算符通經常使用在條件語句中。比方if語句
4.三元條件運算符
三元條件運算符是一種特殊的運算,由三個部分組成,形式是 question ?
answer1 : answer2。這是依據一個條件question是true還是false決定計算後面那個表達式。假設question是ture就計算answer1而且傳回answer1的計算結果,假設是false就是answer2了。用代碼表示就是這樣:
以下有個樣例,計算表格行的高度。
假設表格有表頭。行高就要比内容高50px,假設沒有表頭,就比内容高20px:
用if來寫就是這種
使用三元運算符的話設定行高僅僅要一行代碼即可了。比後面用if的簡單介紹多了。還不用把rowHeight定義成變量。由于在if裡面根本不須要去改變rowHeight的值。
三元運算符提供了一種高效的方式來表達兩選一的情況。
可是使用三元運算符的時候也要注意,假設太簡潔了可能會減少代碼的可讀性。避免結合多個三元運算符搞成一條語句。
5.範圍運算符
Swift提供兩種範圍運算符,用來表示數值範圍
閉區間範圍運算符
閉區間範圍運算符(a...b)定義了從a到b得範圍,而且包括a和b。當你要周遊某個範圍而且須要範圍裡面每一個值都要用到的時候就能夠用範圍運算符了,比方for-in循環
半閉範圍運算符
半閉範圍運算符(a..b)定義了從a到b包括a但不包括b的範圍,之是以叫半閉範圍運算符就是由于僅僅包括左邊屆不包括右邊界。
半閉範圍運算符對于周遊數組這樣的下标從0開始可是不包括數組長度的周遊非常實用。
注意數組包括四項,可是0..count僅僅包括到3。
6.邏輯運算符
邏輯運算符能夠改動或者結合邏輯值true和false。Swift支援三種标準的邏輯操作符 非(。),與(&&),或(||)
邏輯非運算符
邏輯非運算符取相反的結果,是以true變成false,flase變成true。
邏輯非運算符是字首運算符,而且跟操作對象中間不同意有空格。
能夠被讀作“不是a”
表達式if !allowedEntry能夠被讀作“假設不是同意進入”,if裡面的代碼僅僅有假設不是同意進入是真的時候才幹運作。也就是假設同意進入是false的時候。
就像這個樣例一樣,給Boolean型變量或者常量取個好名字能保持代碼整潔易讀,盡量避免使用雙重否定或者一些easy讓人困惑的表達。
邏輯與操作符
對于邏輯與(a && b)操作符來說僅僅有a跟b都是true的時候他才傳回true,否則傳回false。
a跟b不論什麼一個為false,整個表達式都是false,其實,假設a是false,b就不會再去計算了,由于沒有必要啊。以下樣例使用了兩個bool值,而且僅僅有兩個都為true的時候才幹輸出welcome
邏輯或運算符
對于邏輯或(a || b)來說。僅僅要a跟b有一個true,結果就反胃true。
跟邏輯與一樣,假設a計算結果是true,就不會再去計算b的值直接傳回true了。以下的樣例一個Bool值是false,可是第二個是true,兩個與計算之後還是true,是以if通過
結合邏輯運算
你能夠結合多個邏輯運算組成一個更長的複合語句
上面樣例用了多個&&和||組成了一個有點兒長的複合表達式。可是&&和||還是僅僅能各自計算兩個值,是以實際上是三個語句連在一起,能夠解釋成:
假設我們已經進入了正确的門且通過了視網膜掃描;或者假設我們有一張合法的門卡;或者假設我們認識解除緊急警報的password。那麼就能夠進入。
通過對值enteredDoorCode,passedRetinaScan和hasDoorKey的計算,前兩個表達式的計算結果是false,可是我們知道解除警報狀态的password。是以說整個表達式結果還是true。
7.明白的括号
有時候有些地方能夠使用括号也能夠不用括号。可是加上括号能讓代碼看起來更明了。
像上面的樣例,給第一部分加上括号就非常實用了,代碼的意圖就非常清晰
括号表明了第一個與運算的結果是總體結果的一個獨立部分,加上括号不會影響表達式計算結果。可是總體意圖變得更清晰易讀了。可讀性總是比簡潔性要重要。
盡量用括号。
本章完。
下章位址5.Swift字元串和字元