iOS開發-Swift4譯文Swift4官方文件中文版/ Basic Operators(上)(轉載)
原文連結:http://blog.csdn.net/feng2qing/article/details/73864580
Guards翻譯組 正在翻譯Swift 4的全套文件, 這是該文件第二章節《Basic Operators》的上半部分, 第一章節《The Basics》 上半部分請點這裡/下半部分請點這裡, 原文連結: Basic Operators
翻譯 : Stevin三天三夜 (Blog / GitHub)
譯者心聲
我們是一群熱愛翻譯並且熱愛 swift 的人, 希望通過自己的努力讓不熟悉英語的程式設計師也能學習到國外的高質量的文章. 如發現文章中翻譯錯誤之處, 煩請跟我們聯絡, 我們第一時間更正.
想成為我們中一員? 是的, 我們正在招募對翻譯感興趣的小夥伴, 如果你想提高閱讀英語文件的水平, 如果你不甘寂寞, 如果你想為廣大開發者做點事. QQ:835087646
本篇包含內容:
- 基本運算子
- 術語
- 賦值運算子
- 算數運算子
- 求餘運算子
- 一元減號運算子
- 一元加號操作符
- 複合賦值運算子
- 比較運算子
- 三元條件運算
基本運算子
運算子是檢查,改變或合併值的特殊符號和短語。比如:加號(+
)是將兩個數相加,如 let i = 1 + 2
,和邏輯AND
元運算子(&&
)結合兩兩個布林值,比如:if enteredDoorCode && passedRetinaScan
Swift支援多數標準 C 操作符,並且為了消除常見的編碼錯誤改進了幾種特性。例如:賦值運算子(=
)沒有返回值。防止當使用判等運算子(==
)的地方錯誤地使用它。算術運算子(+
,-
,*
,%
等)檢測不允許值溢位,來避免儲存變數的時候變數取值範圍大於或小於其取值範圍導致的異常結果。你也可以使用Swift的溢位運算子實現溢位,詳見Overflow Operators。
Swift還提供了 C 沒有的區間運算子,比如:a..<b
和a...b
,快捷地表達了區間內的數值。
本章描述了Swift常見的運算子,Advanced Operators這章涵蓋了Swift的高階運算子,並且介紹如何自定義運算子和標準實現運算子自定義型別。
術語
運算子有一元運算子、二元運算子和三元運算子。
- 一元運算子針對單個物件操作,比如
-a
,一元運算子分為前置運算子和後置運算子,前置運算子的運算子在物件前面,如!b
,後置運算子的運算子在物件後面,如c!
. - 二元運算子操作兩個物件,如
2 + 3
,是放在中間的,出現在兩個運算物件之間。 - 三元運算子操作三個物件,像C語言一樣,Swift只有一個三元運算子,條件運算子
a ? b : c
.
運算子影響的值叫運算元,在表示式1 + 2
中,+
是二元運算子,它的兩個運算元是1
和2
。
賦值運算子
賦值運算子(a = b
)用b
的值初始化或更新了a
的值:
let b = 10
var a = 5
a = b
// 此時 a 等於10
如果賦值的右邊是一個多元組,那它的元素被分成多個常量或變數:
let (x, y) = (1, 2)
// 此時 x 等於 1,y 等於 2
Swift的賦值操作符不同於 C 和 Objective-C, 它沒有返回值,所以下面的程式碼是錯誤的:
if x = y {
// 這是錯誤的,因為x = y沒有返回值
}
這個特效能夠防止你使用(==
)的時候而錯誤的寫成(=
),因為if x = y
是無效的,Swift能夠幫助你避免這種型別錯誤的發生。
算數運算子
Swift支援所有數值型別的常見四則運算
- 加法(
+
) - 減法(
-
) - 乘法(
*
) - 除法(
/
)
1 + 2 // 等於3
5 - 3 // 等於2
2 * 3 // 等於6
10.0 / 2.5 //等於4.0
Swift的算數運算子不同於 C 和 objective-c 的是預設情況下不允許溢位。你可以使用Swift的溢位運算子進行溢位運算(如:a &+ b
),詳見Overflow Operators.
加法運算子也支援String
的拼接
"hello, " + "world" // 等於 “hello, world”
求餘運算子
求餘運算子(a % b
)計算出b
的多少倍恰好合適a
並且返回剩餘的值(稱作餘數)
NOTE:
在其他語言中求餘運算子也叫做取模運算子,然而嚴格的來說在Swift中它對負數的操作行為,它是一個餘數而非取模。
求餘計算的方式,計算9 % 4
,你先計算出多少個4
恰好適合9
:
兩個4
恰好適合9
,餘數是1
(橙色部分顯示)
在Swift中表達為:
9 % 4 // 等於1
為了得到a % b
的答案,%
運算子計算了以下等式並且返回餘數作為結果:
a = (b * 倍數) + 餘數
當倍數取到最大值的時候乘上b
就恰好適合a
把9
和4
放入等式中
9 = (4 * 2) + 1
相同的方法,可以計算負數
-9 % 4 // 等於-1
把-9
和4
放入等式可以得到
-9 = (4 * -2) + -1
餘數是-1
對於負數b
求餘的時候,b
的符號會被忽略,意味著a % b
和a % -b
結果是一樣的。
一元減號運算子
數值的符號可以切換使用字首-
,稱為一元減號運算子
let three = 3
let minusThree = -three //minusThree等於-3
let plusThree = -minusThree //plusThree等於3,或“負負3”
一元減號(-
)直接在運算元之前,中間沒有任何空格
一元加號操作符
一元加號操作符(+
)只是簡單地返回了運算元的值,沒有做任何改變
let minusSix = -6
let alsoMinusSix = +minusSix //alsoMinusSix等於-6
儘管一元加號操作符實際上沒有做任何事情,但當你使用一元減號操作符的時候可以使用它來為提供程式碼提供對稱性。
複合賦值運算子
想C一樣,Swift也提供把賦值運算子(=
)和其他運算子結合起來的複合賦值運算子,比如說其中的*加法賦值運
算符*(+=
)
var a = 1
a += 2
a 現在等於 3
表示式a += 2
是 a = a + 2
的簡寫,有限地將加法和賦值合成一個運算子同時執行兩項任務
NOTE
複合賦值運算子沒有返回值,比如說你不能這樣寫:let b = a += 2
對了,Swift提供的標準庫提供的複合賦值操作符完整列表,詳見Swift Standard Library Operators Reference。
比較運算子
Swift支援所有標準 C 語言中的比較運算子
- 等於(
a == b
) - 不等於(
a != b
) - 大於(
a > b
) - 小於(
a < b
) - 大於等於(
a >= b
) - 小於等於(
a <= b
)
NOTE
Swift也提供了恆等(===
)和不恆等(!==
)兩個比較符用於測試兩個物件是否引用同一個物件的例項,更多資訊詳見Classes and Structures.
每個比較運算子都返回了一個布林值來標識語句是否為真
1 == 1 //為真,因為1等於1
2 != 1 //為真,因為2不等於1
2 > 1 //為真,因為2大於1
1 < 2 //為真,因為1小於2
1 >= 1 //為真,因為1大於或小於1
2 <= 1 //為假,2並不小於或等於1
比較運算子經常用於條件語句,比如if
語句
let name = "world"
if name == "world" {
print("hello, world")
} else {
print("I'm sorry \(name), but I don't recognize you")
}
// 輸出“hello world”,因為name確實等於“world”
更多短語if
語句,詳見Control Flow
只要元組中的每個值都相同,你也可以比較相同數量值的元祖。比如:Int
和String
都可以比較,這意味著型別(Int,String)
型別的元組可以比較,相反,布林值不能比較,這意味著包含布林值的元祖不能比較。
元組的比較從左到右,每次比較一個值,直到比較發現兩個值不相等,比較完這兩個值,比較的結果決定了元組比較的總體結果,如果每個元素都相等,那麼元組本身也相等,比如:
(1, "zebra") < (2, "apple") //為真,因為1小於2;“zebra”和“apple”不比較
(3, "apple") < (3, "bird") //為真,因為3等於3;“apple”小於“bird”
(4, "dog") == (4, "dog") //為真, 因為4等於4;"dog"等於"dog"
在上面的示例中,第一行左右比較的行為,因為1
小於2
,就決定(1, "zebra")
小於(2, "apple")
,而不去考慮元組中的其它值,”zebra“
不小於”apple“
並不重要,因為元祖的第一個元素已經決定了比較結果,然而,當元組的第一個元素相同的時候,就像第二行和第三行一樣,比較他們的第二個元素。
NOTE
Swift標準庫包含了少於7個元素的元組比較運算子,七個或更多元素的元祖比較時,你必須自己實現比較運算。
三元條件運算
三元條件運算子的特殊性在於它有三部分運算元,像:問題
? 答案1
: 答案2
,這個基於問題
真或假決定兩個表示式中選出一個的簡潔操作。如果問題
為真,則返回值為答案1
,否則,返回值為答案2
.
三元條件操作符簡短地描述了下面的程式碼
if question {
answer1
} else {
answer2
}
這有一個計算錶行高的例子,如果有表頭,行高應該高於內容50畫素,如果沒有表頭,高於內容20畫素。
let contentHeight = 40
let hasHeader = true
let rowHeight = contentHeight + (hasHeader ? 50 : 20)
// 行高等於90
前面的例子要比下面的程式碼簡潔
let contentHeight = 40
let hasHeader = true
let rowHeight: Int
if hasHeader {
rowHeight = contentHeight + 50
} else {
rowHeight = contentHeight + 20
}
// 行高等於90
第一個例子使用了三元條件運算子一行程式碼就能算出rowHeight
,這比第二個例子的程式碼更簡潔。
三元條件運算子為需要考慮的兩個表示式提供了高效的簡寫,然而,使用三元條件運算子也需要謹慎。過度使用會導致簡潔的程式碼變的很難讀懂。避開的一個組合語句中使用多個三元條件運算子的情況。