介紹:Swift 語言由蘋果公司在 2014 年推出楼眷,用來撰寫 Mac OS 和 iOS 應(yīng)用程序,并且Swift還是開源的粟瞬,開源地址:https://github.com/apple/swift刹泄,同時附上官方博客地址:https://swift.org
目前Swift已經(jīng)發(fā)展到了第五版本。顯然蘋果大有推翻 OC “江山”的意思.
今天就來初探一下Swift,看看究竟為何swift有這么大的能力。
參考內(nèi)容:
Swift中文
YungFan老師
1. 基本運算符介紹
- Swift 在支持 C 中的大多數(shù)標(biāo)準(zhǔn)運算符的同時也增加了一些排除常見代碼錯誤的能力。賦值符號( = )不會返回值蔓彩,以防它被誤用于等于符號( == )的意圖上。算數(shù)符號( + , - , * , / , % 以及其他)可以檢測并阻止值溢出踱侣,以避免你在操作比儲存類型允許的范圍更大或者更小的數(shù)字時得到各種奇奇怪怪的結(jié)果粪小。
- Swift 提供了兩種 C 中沒有的區(qū)間運算符( a..<b 和 a...b ),來讓你便捷表達(dá)某個范圍的值抡句。
2. 專門用語
運算符包括一元探膊、二元、三元:
- 一元運算符對一個目標(biāo)進(jìn)行操作(比如 -a )待榔。一元前綴運算符在目標(biāo)之前直接添加(比如 !b )逞壁,同時一元后綴運算符直接在目標(biāo)末尾添加(比如 c! )。
- 二元運算符對兩個目標(biāo)進(jìn)行操作(比如 2 + 3 )同時因為它們出現(xiàn)在兩個目標(biāo)之間锐锣,所以是中綴腌闯。
- 三元運算符操作三個目標(biāo)。如同 C雕憔,Swift語言也僅有一個三元運算符姿骏,三元條件運算符( a ? b : c )。
受到運算符影響的值叫做操作數(shù)斤彼。在表達(dá)式 1 + 2 中分瘦, + 符號是一個二元運算符蘸泻,其中的兩個值 1 和 2 就是操作數(shù)。
3. 賦值運算
- 賦值運算符( a = b )可以初始化或者更新 a 為 b 的值:
let a = 10
let b = 20
let c = a + b
- 如果賦值符號右側(cè)是擁有多個值的元組嘲玫,它的元素將會一次性地拆分成常量或者變量:
let (d , e) = (10, 20)
print(d, e)
//print 10 20
與 Objective-C 和 C 不同悦施,Swift 的賦值符號自身不會返回值。下面的語句是不合法的:
if x = y {
// 這是不合法的, 因為 x = y 并不會返回任何值去团。
}
這個特性避免了賦值符號 (=) 被意外地用于等于符號 (==) 的實際意圖上抡诞。Swift 通過讓 if x = y 非法來幫助你避免這類的錯誤在你的代碼中出現(xiàn)。
4. 算數(shù)運算符
和其他編程語言并無不同土陪。Swift 對所有的數(shù)字類型支持四種標(biāo)準(zhǔn)算術(shù)運算符:
加 ( + )
減 ( - )
乘 ( * )
除 ( / )
求余 (%)
-
不同于OC昼汗,Swift支持 String 的拼接
"hello " + "Swift"
//print "hello Swift"
- 一元減號/加法運算符
數(shù)字值的正負(fù)號可以用前綴 – 來切換,我們稱之為 一元減號運算符:
一元減號運算符( - )直接在要進(jìn)行操作的值前邊放置旺坠,不加任何空格乔遮。
let three = 3
let minusThree = -three // minusThree equals -3
let plusThree = -minusThree // plusThree equals 3, or "minus minus three"
一元加號運算符 ( + )直接返回它操作的值,不會對其進(jìn)行任何的修改:
let minusSix = -6
let alsoMinusSix = +minusSix // alsoMinusSix equals -6
盡管一元加號運算符實際上什么也不做取刃,你還是可以對正數(shù)使用它來讓你的代碼對一元減號運算符來說顯得更加對稱。
5. 組合賦值符號
如同 C 出刷,Swift 提供了由賦值符號( = )和其他符號組成的 組合賦值符號 璧疗。一個加賦值符號的栗子 ( += ):
var a = 1
a += 2
// a is now equal to 3
表達(dá)式 a += 2 其實就是 a = a + 2 的簡寫。效率上來講馁龟,加號和賦值符號組合成的一個運算符能夠同時進(jìn)行這兩個操作崩侠。
注意:
組合運算符不會返回任何值。舉例來說坷檩,你不能寫成這樣 let b = a += 2 却音。這個與前邊提到的增量和減量符號的行為不同。
6. 比較運算符
Swift 支持所有 C 的標(biāo)準(zhǔn)比較運算符:
相等 ( a == b )
不相等 ( a != b )
大于 ( a > b )
小于 ( a < b )
大于等于 ( a >= b )
小于等于 ( a <= b )
Swift 同時也提供兩個等價運算符( === 和 !== )矢炼,你可以使用它們來判斷兩個對象的引用是否相同系瓢。
- 你同樣可以比較擁有
同樣數(shù)量值
的元組,只要元組中的每個值都是可比較的句灌。比如說夷陋,Int 和 String 都可以用來比較大小,也就是說 (Int,String) 類型的元組就可以比較胰锌。一般來說骗绕,比較的元組每個對應(yīng)的類型要是相同的
,同時Bool 不能比較
资昧,這意味著包含布爾值的元組不能用來比較大小
酬土。
元組以從左到右的順序比較大小,一次一個值格带,直到找到兩個不相等的值為止撤缴。如果所有的值都是相等的刹枉,那么就認(rèn)為元組本身是相等的。比如說:
(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"
Swift 標(biāo)準(zhǔn)庫包含的元組比較運算符僅支持小于七個元素的元組腹泌。要比較擁有七個或者更多元素的元組嘶卧,你必須自己實現(xiàn)比較運算符。
7. 三元條件運算符
三元條件運算符是一種有三部分的特殊運算凉袱,它看起來是這樣的: question ? answer1 : answer2 芥吟。這是一種基于 question 是真還是假來選擇兩個表達(dá)式之一的便捷寫法。如果 question 是真专甩,則會判斷為 answer1 并且返回它的值钟鸵;否則,它判斷為 answer2 并且返回它的值涤躲。
let contentHeight = 40
let hasHeader = true
let rowHeight = contentHeight + (hasHeader ? 50 : 20)
// rowHeight is equal to 90
8. 合并空值運算符
合并空值運算符 ( a ?? b )
如果可選項 a 有值則展開棺耍,如果沒有值,是 nil 种樱,則返回默認(rèn)值 b 蒙袍。表達(dá)式 a 必須是一個可選類型。表達(dá)式 b 必須與 a 的儲存類型相同嫩挤。
合并空值運算符是下邊代碼的縮寫:
a != nil ? a! : b
如果 a 的值是非空的害幅, b 的值將不會被考慮。這就是所謂的 短路計算 岂昭。
let defaultColorName = "red"
var userDefinedColorName: String? // defaults to nil
var colorNameToUse = userDefinedColorName ?? defaultColorName
// 返回了 defaultColorName 的值以现, red
如果你給 userDefinedColorName 指定一個非空的值然后讓合并空值運算符在檢查一次,那么 userDefinedColorName 中封裝的值將會替換掉默認(rèn)值:
userDefinedColorName = "green"
colorNameToUse = userDefinedColorName ?? defaultColorName
// 返回了 userDefinedColorName 的值约啊, green
9. 區(qū)間運算符
Swift 包含了兩個 區(qū)間運算符 邑遏,他們是表示一個范圍的值的便捷方式。
9.1 閉區(qū)間運算符
- 閉區(qū)間運算符
( a...b )
定義了從 a 到 b 的一組范圍恰矩,并且包含 a 和 b
记盒。 a 的值不能大于 b 。
for index in 1...5 {
print(index);
}
// print : 1
// print : 2
// print : 3
// print : 4
// print : 5
9.2 半開區(qū)間運算符
- 半開區(qū)間運算符
( a..<b )
定義了從 a 到 b 但不包括 b 的區(qū)間
枢里,即半開
孽鸡,因為它只包含起始值但并不包含結(jié)束值。(十奶注:其實就是左閉右開區(qū)間栏豺。)如同閉區(qū)間運算符彬碱, a 的值也不能大于 b ,如果 a 與 b 的值相等奥洼,那返回的區(qū)間將會是空的
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
注意數(shù)組包含四個元素巷疼,但是 0..<count 只遍歷到 3(元素序號的最大值),因為這是一個半開區(qū)間。
9.3 單側(cè)區(qū)間
閉區(qū)間有另外一種形式來讓區(qū)間朝一個方向盡可能的遠(yuǎn)
——比如說嚼沿,一個包含數(shù)組所有元素的區(qū)間估盘,從索引 2 到數(shù)組的結(jié)束。在這種情況下骡尽,你可以省略區(qū)間運算符一側(cè)的值遣妥。因為運算符只有一側(cè)有值,所以這種區(qū)間叫做單側(cè)區(qū)間攀细。
我理解為:
[值...]:取出從某一位開始到最后一位的所有元素
[...值]:取出從某一位開始到最后一位的所有元素
for name in names[1...] {
print(name)
}
for name in names[...3] {
print(name)
}
for name in names[1...3] {
print(name)
}
for name in names[1..<3] {
print(name)
}
單側(cè)區(qū)間可以在其他上下文中使用箫踩,不僅僅是下標(biāo)。你不能遍歷省略了第一個值的單側(cè)區(qū)間谭贪,因為遍歷根本不知道該從哪里開始境钟。你可以遍歷省略了最終值的單側(cè)區(qū)間;總之俭识,由于區(qū)間無限連續(xù)慨削,你要確保給循環(huán)添加一個顯式的條件。你同樣可以檢測單側(cè)區(qū)間是否包含特定的值套媚,就如下面的代碼所述缚态。
let range = ...5
range.contains(7) // false
range.contains(4) // true
range.contains(-1) // true
10. 邏輯運算符
常見的邏輯運算符分為:
與 (a && b):兩者都為真才成立(true), 否則為( false )
或(a || b):兩者中有一個為為真 就成立(true)堤瘤,兩者同時為假 才為 ( false )
非 ( !a ) : 轉(zhuǎn)換 bool 值 猿规,把 true 變成 false , 把 false 變成 true 宙橱。
同時 它們之前可以進(jìn)行混合的邏輯運算
let oneTrue = true
let twoFalse = false
let threeTrue = true
if !oneTrue {
print("oneTrue 為 假")
}else{
print("oneTrue 為 真")
}
// oneTrue 為 真
if !twoFalse {
print("twoFalse 為 假")
}else{
print("twoFalse 為 真")
}
// twoFalse 為 假
if oneTrue && twoFalse {
print("oneTrue 和 twoFalse 都為真!")
}else{
print("oneTrue 和 twoFalse 中有一個為假!")
}
// oneTrue 和 twoFalse 中有一個為假!
if oneTrue || twoFalse {
print("oneTrue 和 twoFalse 中有一個為假!")
}else{
print("oneTrue 和 twoFalse 都為假!")
}
// oneTrue 和 twoFalse 中有一個為假!
混合邏輯運算
Swift 語言中邏輯運算符 && 和 || 是左相關(guān)的,這意味著多個邏輯運算符組合的表達(dá)式會首先計算最左邊的子表達(dá)式
蘸拔。
if oneTrue || twoFalse || threeTrue && fourTrue{
print("為真")
}else{
print("為假")
}
顯示括號
很多時候雖然不被要求师郑,但使用括號還是很有用的,這能讓復(fù)雜的表達(dá)式更容易閱讀调窍。
先會優(yōu)先執(zhí)行括號里面的
if (oneTrue || threeTrue) && twoFalse {
print("為真")
}else{
print("為假")
}
// 為假
好了:到這里基本運算符就學(xué)習(xí)完了
可選類型的介紹就到這里了宝冕。有什么不足的地方歡迎補(bǔ)充。文章大多數(shù)內(nèi)容來自:
求職廣告:本人實習(xí)生地梨,現(xiàn)在急需一份工作,杭州南京合肥的都可以缔恳。對我感興趣的可以私聊我 0.0宝剖。謝謝~~~