版本記錄
版本號 | 時間 |
---|---|
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
可見吃型,x
和y
被自動的對應(yīng)1和2证鸥。
注意:與c
和oc
完全不同的是,它們的賦值如果用在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
類型的值。
求余運算符
oc
和swift
中都有求余運算符夕膀,也可以叫取模運算虚倒。我們看下面swift
中的幾種情況。
- 對負(fù)數(shù)求余产舞,如果有一個參數(shù)為負(fù)數(shù)魂奥,那么負(fù)數(shù)的符號會被忽略。也就是說
a % b
和a % -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ù)組遍歷或者計時器等很多方面都會用到,單純語法并不難看幼,c
和oc
中都有這個的用法批旺,我們就說一下很常見的++a
和a++
的問題吧。
需要注意的是诵姜,在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
值瓜喇。
三目運算符
oc
和swift
中都有三目運算符挺益,其實它的作用和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小于b
。oc
中是沒有這個運算符的帆锋,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中是一樣的,只有個別的一兩個不一樣冰木,大家看起來也不會很吃力穷劈,希望大家能喜歡~~~