聚化網(wǎng)網(wǎng)站網(wǎng)絡(luò)推廣渠道有哪些
一、可選類型
swift的可選類型用于處理變量可能為nil(空值)即缺失的情況。在swift中,可選類型通過在原始類型后面添加問號(?)來聲明(注意:類型與?之間沒有空格)。例如以下的這兩個聲明是相同的:
這兩種情況,都可以聲明變量為可選整數(shù)類型變量.同時顯示聲明也可以如
1.可選類型的枚舉
swift的可選類型實(shí)際上是一個枚舉(枚舉是一種用于定義一組相關(guān)值的類型,它允許在一個類型安全的方式下定義一組相關(guān)的值,并且可以在代碼中使用這些值,枚舉可以包含不同的數(shù)據(jù)類型)類型,包含none(沒有值)和some(包含一個值).
2.可選類型的使用
2.1范圍給定
聲明可選變量的時候,不僅要確保使用?使用,同時也要使用問好給?操作符合適的范圍。
例如,我們在聲明整數(shù)數(shù)組的時候,如果下成下面的第一個形式就會報(bào)錯,正確的寫法應(yīng)該是第二個形式.? ? ? (應(yīng)寫成 (Int[])?? ? ? ? ? 寫成 Int[]? 會報(bào)錯。)
2.2初始值
當(dāng)聲明應(yīng)該可選變量或者可選屬性(類、結(jié)構(gòu)體和枚舉的屬性)的時候沒有提供初始值,那么它的值默認(rèn)為nil(空值).
2.3布爾環(huán)境中應(yīng)用
在布爾環(huán)境中,如果可選類型的值為Optional.some(包含一個值)那么這個可選類型等于true,否則為false.
2.4訪問
可選類型可以用后綴操作符感嘆號(!)來訪問這個值。
3可選類型與nil的比較
可選類型與Objective-C中指針nil的值(表示指針不再指向任何有效的對象)很相似,但nil只對類(class,而可選類型對所有類型都可以使用,且更加安全。
4.隱藏式可選類型(自動解析)
當(dāng)確定一個可選類型總是包含值時,可以使用隱藏式解包可選類型,將!放在類型的末尾,表示在使用該值的時候可以自動解包,如圖下面的例子:
5.強(qiáng)制解包
當(dāng)確定可選類型確實(shí)包含值以后,可以使用!(用于表示已知可選有值可以使用)來強(qiáng)制解包可選類型,注意:如果可選類型為nil(空值),強(qiáng)制解包會導(dǎo)致允許時崩潰。
6.可選綁定
使用可選綁定可以判斷可選是包含值,如果包含就把值賦值給一個臨時常量或變量??蛇x綁定可以在if和while語句中來對可選類型的值進(jìn)行判斷并把值賦值給一個常量或變量。如下有可選綁定的實(shí)例:
運(yùn)行的結(jié)果為:
二、字面量
定義:表示特定類型的常量值的語法表示形式,允許直接指定常量的值,而不是通過變量或表達(dá)式進(jìn)行計(jì)算。
1.整型面量
整型字面量可以是一個十進(jìn)制、二進(jìn)制(0b開頭)、八進(jìn)制(0o開頭)或十六進(jìn)制(0x開頭)常量。
2.浮點(diǎn)型字面量
浮點(diǎn)型字面量有整數(shù)部分,小數(shù)點(diǎn),小數(shù)部分及指數(shù)部分。
浮點(diǎn)型字面量可以是Float或Double類型。swift默認(rèn)的浮點(diǎn)型字面量類型是Double。(如果要使用Float類型的浮點(diǎn)數(shù),可以在字面量后面加F或者使用顯示類型聲明)。浮點(diǎn)型字面量默認(rèn)用十進(jìn)制表示,要使用十六進(jìn)制表示要加前綴0x。
浮點(diǎn)型字面量(十進(jìn)制)由十進(jìn)制數(shù)字后跟小數(shù)部分或指數(shù)部分組成。
2.1.小數(shù)表示法
2.2.科學(xué)計(jì)數(shù)法表示法
2.3.十六進(jìn)制表示法
十六進(jìn)制浮點(diǎn)型字面量由0x后跟可選的十六進(jìn)制小數(shù)部分以及十六進(jìn)制指數(shù)部分組成。十六進(jìn)制小數(shù)部分由小數(shù)點(diǎn)后跟十六進(jìn)制數(shù)字串組成。指數(shù)部分由大寫或小寫字母p為前綴后跟十進(jìn)制數(shù)字串(e之前的數(shù)量乘以10的幾次方)組成,如以下的例子:
(0xFp2 表示 15 ? 2^2,也就是 60;同樣,0xFp-2 表示 15 ? 2^-2,也就是 3.75。)
2.4.可讀性
浮點(diǎn)型字面量允許使用下劃線和在數(shù)字前加0來增強(qiáng)數(shù)字的可讀性,不會影響字面量的值。
3.字符串型字面量
字符串的字面量,用雙引號括起來。
注意:字符串型字面量不能包含未轉(zhuǎn)義的雙引號(“),未轉(zhuǎn)義的反斜線(\)、回車符或轉(zhuǎn)行符。
4.布爾字面量
布爾型字面量的默認(rèn)類型是Bool,布爾值字面量有三個值:true(真),false(假),nil(沒有值)。
5.數(shù)組字面量
6.字典字面量
三、運(yùn)算符
1.算術(shù)運(yùn)算符
算術(shù)運(yùn)算符包括加號(+)、減號(-)、乘號(*)、除號(/)、求余(%)
注意:swift語言的最新版本,中自增(++)、自減(--)運(yùn)算符已被移除。
例子:編寫包含以上運(yùn)算符的計(jì)算器。
2.比較運(yùn)算符
比較運(yùn)算符包括等于(==)、不等于(!=)、大于(>)、小于(<)、大于等于(>=)、小于等于(<=)
例子:
運(yùn)行的結(jié)果為:
3.邏輯運(yùn)算符
邏輯運(yùn)算符包括:與(&&)、或(||)、非(!)
例子:
運(yùn)行的結(jié)果為:
4.位運(yùn)算符
位運(yùn)算符用來對二進(jìn)制進(jìn)行操作,~(取反),&(與),|(或),^(異或),<<(左移),>>(右移)。下面我以下面的例子來一一說明。
其中:A為2轉(zhuǎn)化為2進(jìn)制就為10
B為3轉(zhuǎn)化為2進(jìn)制為11
運(yùn)行的結(jié)果為:
1.與
a&b:對a,b每一位(二進(jìn)制)進(jìn)行與操作,只有兩個位都為1時候,結(jié)果才為1,否則為0.
2.或
a|b:對a,b每一位進(jìn)行或操作,只要兩位中至少有一個1,結(jié)果就為1
3.異或
a^b:對a,b每一位進(jìn)行異或操作,當(dāng)兩個位不相同,結(jié)果為1
4.取反
~a:對a,每一位進(jìn)行取反操作,即對a的每一位都取反
5.左移
a<<b:將a的所有位左移b位,右側(cè)空缺的位用0填充。
a>>b:將a的所有位右移b位,左側(cè)空缺的位用0填充。
5.賦值運(yùn)算符
例子:
運(yùn)行的結(jié)果為:
6.區(qū)間運(yùn)算符
1.閉區(qū)間運(yùn)算符
閉區(qū)間運(yùn)算符(a...b)(a<b)定義一個包含從a到b(包括a和b)的所有值的區(qū)間。常用在for in循環(huán)中
2.半開區(qū)間運(yùn)算符
半開區(qū)間(a..<b)定義一個從a到b但不包含b的區(qū)間,注意:包括a。
7.其他運(yùn)算符
1.一元運(yùn)算符
一元運(yùn)算符對單一操作對象操作,一元運(yùn)算符分前置運(yùn)算符(需要緊跟在操作對象之前)和后置運(yùn)算符(需要緊跟在操作對象之后),區(qū)分:在C語言中沒有c!的語法,在swift中用在Optional類型取值,如一元減(-3)、一元加(+2)。
2.二元運(yùn)算符
二元運(yùn)算符操作兩個操作對象,而且放置在對象之間。如(2 + 3)
3.三元運(yùn)算符
和C語言一樣,A?B:C(A為真執(zhí)行B,A為假執(zhí)行C)
8.運(yùn)算符優(yōu)先級
不同優(yōu)先級從高到低,相同優(yōu)先級大多數(shù)按從左到右,只有三個優(yōu)先級從右到左(單目運(yùn)算符(一元運(yùn)算符)、條件運(yùn)算符、賦值運(yùn)算符)。
基本的優(yōu)先級:
- 指針最優(yōu),單目運(yùn)算優(yōu)于雙目運(yùn)算。如正負(fù)號。
- 先乘除(模),后加減。
- 先算術(shù)運(yùn)算,后移位運(yùn)算,最后位運(yùn)算。請?zhí)貏e注意:1 << 3 + 2 & 7 等價于 (1 << (3 + 2))&7
- 邏輯運(yùn)算最后計(jì)算
四、條件語句
1.?:運(yùn)算符
a?b:c;
表示a為真執(zhí)行b,a為假執(zhí)行c。
2.if語句
組成:由一個布爾表達(dá)式和一個或多個執(zhí)行語句組成。
語法:if a{
//如果布爾表達(dá)式為真將執(zhí)行語句
}
例子:
運(yùn)行結(jié)果為:
3.if...else語句
語法:if a?{
? ?/* 如果布爾表達(dá)式為真將執(zhí)行的語句 */
} else {
? ?/* 如果布爾表達(dá)式為假將執(zhí)行的語句 */
}
例子:
運(yùn)行的結(jié)果為:
4.if...else if...else語句
一個if語句后可以跟一個可選的else if...else語句。但使用的時候注意:
- if 語句后可以有 0 個或 1 個 else,但是如果 有 else if 語句,else 語句需要在 else if 語句之后。
- if 語句后可以有 0 個或多個 else if 語句,else if 語句必須在 else 語句出現(xiàn)之前。
- 一旦 if 語句執(zhí)行成功,其他的 else if 或 else 語句都不會執(zhí)行。
語法:
if a1 {
? ?/* 如果a1 表達(dá)式為 true 則執(zhí)行該語句 */
} else if a2 {
? ?/* 如果 a2?表達(dá)式為 true 則執(zhí)行該語句 */
} else if a3 {
? ?/* 如果 a3 表達(dá)式為 true 則執(zhí)行該語句 */
} else {
? ?/* 如果以上所有條件表達(dá)式都不為 true 則執(zhí)行該語句 */
}
例子:
運(yùn)行的結(jié)果為:
5.內(nèi)嵌if語句
在if或else if語句內(nèi)使用另一個if或else if語句
語法:
if a1?{
? ?/* 當(dāng) a1?表達(dá)式 true 時執(zhí)行 */
? ?if a2 {
? ? ? /* 當(dāng) a2?表達(dá)式 true 時執(zhí)行 */
? ?}
}
例子:
運(yùn)行的結(jié)果為:
6.switch語句
語法:
switch expression {
? ?case expression1 ?:
? ? ? statement(s)
? ? ? fallthrough /* 可選 */
? ?case expression2, expression3 ?:
? ? ? statement(s)
? ? ? fallthrough /* 可選 */
??
? ?default : /* 可選 */
? ? ? statement(s);
}
注意:一般在switch語句中不使用fallthrough語句(用于繼續(xù)執(zhí)行下一個 case)。在大多數(shù)語言(如C語言)中switch語句塊中case之后的語句會順序運(yùn)行,所有想要終止運(yùn)行要在case后緊跟break,但對于swift語言中,默認(rèn)是不會執(zhí)行下去的,switch也會終止,如果想要case后面語句按照順序運(yùn)行,則需要用fallthrough)
例子:
有fallthrough:
運(yùn)行的結(jié)果為:
沒有fallthrough:
運(yùn)行的結(jié)果為: