Swift 對空格有要求。
Swift數據類型
- Int 相當于NSInteger,根據不同平臺有不同的長度。
- 無符號類型UInt,盡量不要使用UInt。
- 浮點數,Double(64位浮點數),Float(32位浮點數)。
- 布爾值,Swift有一個基本的布爾(Boolean)類型,叫做Bool。有兩個布爾常量true,和False。在OC中為YES,NO.
- 字符串,String,OC中對應為NSString。
- 字符,Character,即單個字母。OC中對應為Char。
- 可選類型,Optional,用來處理值可能缺失的情況。表示有值或沒有值
類型別名
typealias,對當前類型定義另一個名字。typealias newStr = String
類型安全
type safe,Swift會在編譯代碼時進行類型檢查(type checks)
類型推斷
如果沒有顯示指定類型,Swift會使用類型推斷(type inference)來選擇合適的類型。浮點數會優先推斷為Double。
Swift可選類型
Swift使用 ? 作為命名類型Optional的簡寫,Optional是一個含有兩種情況的枚舉,None和Some(T),用來表示可能或可能沒有值。任何類型都可以聲明或隱式轉換為可選類型,聲明時要確保給?
操作符一個合適的范圍。類型和?之間沒有空格。以下兩種方式等價。
var optionalInt: Int?
var optionalInt2: Optional<Int>
聲明可選變量如未給定初始值,默認為nil。
強制解析
當使用?
操作符聲明時,如果確定可選類型包含值一個非nil
值,可以在變量后面加上!
來強制解析(forced unwrapping)。如果值為nil
則會導致運行時錯誤。
自動解析
聲明可選變量時,使用!
替換?
,這樣在解析可選變量時就可以不用加上!
,以實現自動解析。
可選綁定?
使用可選綁定(optional binding)來判斷可選類型是否包含值,如果包含就把值復制給一個臨時常量或變量。eg:
// 可選綁定
if let myInt = optionalInt {
print(myInt)
}
Swift 常量?
Swift常量使用關鍵字let
聲明,必須初始值。let constantName = <initial value>
。
類型標注
聲明一個常量或者變量時候可以選擇加上類型標注(type annotation),用于說明常量或者變量中要存儲的值的類型。使用方法為在常量或者變量后加上冒號和空格,然后加上類型名稱。 var constantName: <data type> = <optional initial value>
輸出
Swift中使用print
替換了原來的println
函數來輸出常量和變量。在字符串中可以使用\()
來插入常量和變量。
Swift字面量
字面量:能夠直接了當的指出自己的類型并為變量進行賦值的值,如整型字面量、浮點型字面量、字符串型字面量和布爾型字面量。
字符串型字面量的轉義
轉義字符 | 含義 |
---|---|
\0 | 空字符 |
\ | 反斜線 \ |
\b | 退格(BS) , 將當前位置移到前一列 |
\f | 換頁(FF),將當前位置移到下頁開頭 |
\n | 換行符 |
\r | 回車符 |
\t | 水平制表符 |
\v | 垂直制表符 |
' | 單引號 |
" | 雙引號 |
\000 | 1到3位八進制數所代表的任意字符 |
\xhh... | 1到2位十六進制所代表的任意字符 |
布爾型字面量默認類型為Bool
,包含三個值:true , false , nil
Swift運算符
運算符是一個符號,用戶告訴編譯器執行一個數學或邏輯運算。包含
- 算數運算符
- 比較運算符
- 邏輯運算符
- 位運算符
- 賦值運算符
- 區間運算符(閉區間運算符:
...
。 半開區間運算符:..<
。) - 其他運算符(一元加、一元減、三元運算符)
Swift條件語句
語句 | 描述 |
---|---|
if 語句 | if 語句由一個布爾表達式和一個或多個執行語句組成。 |
if...else語句 | if 語句后可以有可選的 else 語句, else 語句在布爾表達式為 false 時執行。可用?: 代替 |
if...else if...else 語句 | if 后可以有可選的 else if...else 語句, else if...else 語句常用于多個條件判斷。 |
內嵌 if 語句 | 你可以在 if 或 else if 中內嵌 if 或 else if 語句。 |
switch 語句 | switch 語句允許測試一個變量等于多個值時的情況。 |
Swift循環
循環類型
循環類型 | 描述 |
---|---|
for-in | 遍歷一個集合里面的所有元素,例如由數字表示的區間、數組中的元素、字符串中的字符。 |
for 循環 | 用來重復執行一系列語句直到達成特定條件達成,一般通過在每次循環完成后增加計數器的值來實現。 |
while 循環 | 運行一系列語句,如果條件為true,會重復運行,直到條件變為false。 |
repeat...while 循環 | 類似 while 語句區別在于判斷循環條件之前,先執行一次循環的代碼塊。類似于do...while。 |
循環控制語句
控制語句 | 描述 |
---|---|
continue 語句 | 告訴一個循環體立刻停止本次循環迭代,重新開始下次循環迭代。 |
break 語句 | 中斷當前循環。 |
fallthrough 語句 | 如果在一個case執行完后,繼續執行下面的case,需要使用fallthrough(貫穿)關鍵字。 |
Swift字符串
Swift字符串類型為String
。
字符串創建
var stringA = "I`m string" // 字面量創建
var stringB = String("I`m string too") // String實例化,不推薦
空字符串
創建空字符串:
var stringA = "" // 字面量創建
var stringB = String() // String實例化創建
isEmpty
可用來判斷字符串是否為空!
字符串連接
字符串可通過+
來連接
字符串長度
字符串可通過String.characters.count
屬性來計算
字符串比較
字符串通過==
來比較是否相等
字符串函數和運算符
- isEmpty 判斷字符串是否為空,返回布爾值
- hasPrefix(prefix: String) ,檢查字符串是否擁有特定后綴
- hasSuffix(suffix: String) ,檢查字符串是否擁有特定后綴。
- Int(String) ,轉換字符串數字為整型。 實例:
let myString: String = "256" let myInt: Int? = Int(myString)
- String.characters.count ,計算字符串的長度
- utf8 ,您可以通過遍歷 String 的 utf8 屬性來訪問它的 UTF-8 編碼
- utf16 ,您可以通過遍歷 String 的 utf8 屬性來訪問它的 UTF-16 編碼
- unicodeScalars 您可以通過遍歷String值的unicodeScalars屬性來訪問它的 Unicode 標量編碼.
- 連接兩個字符串,并返回一個新的字符串
- += 連接操作符兩邊的字符串并將新字符串賦值給左邊的操作符變量
- == 判斷兩個字符串是否相等
- < 比較兩個字符串,對兩個字符串的字母逐一比較。
- != 比較兩個字符串?是否不相等。
swift字符
Swift字符數據類型為Character
.Swift無法創建空的Character類型的變量或常量。
遍歷字符串中的字符
for ch in "I`m string".characters {
print(ch)
}
字符串連接字符
可以使用String的append(c: Character)
來連接字符
var char: Character = "A"
stringA.append(char)
print(stringA)
Swift數組
Swift中數組的數據類型為Array
,使用有序列表存儲同一類型的多個值。Swift中的數組元素類型沒有限制。
創建數組
var emptyArray = [someType]() // 空數組
var sizeArray = [someType](repeating: 0, count: 3) // 大小為3,初始值為0的數組
var someArray = [1,2,3] // 直接創建
訪問數組
根據數組的索引來訪問數組的元素。var someVar = someArray[index]
使用count
屬性來計算數組元素個數
使用isEmpty
屬性判斷數組是否為空,返回布爾值。
修改數組
- 通過索引來直接更改元素的值
- 通過
append()
方法或者賦值運算符+=
在數組末尾添加元素。
遍歷數組
- 使用for in 遍歷
- 使用
enumerate()
方法進行數組遍歷。
合并數組
使用+
來合并兩種相同類型的數組。新數組的類型會從兩個數組的數據類型中推斷出來。
Swift字典
Swift字典用來存儲無序的相同類型數據的集合。Swift中的Key和Value的類型沒有限制。
創建字典
與數組相似。
var emptyDict = [keyType : valueType]() // 空字典
var someDict: [Int : Int] = [1:11, 2: 22] // 字典實例
訪問字典
通過字典的索引Key來訪問數組元素。var someVar = someDict[key]
使用只讀屬性count
計算字典有多少鍵值對
使用只讀屬性isEmpty
屬性來判斷字典是否為空,返回布爾值。
修改字典
- 通過下標key增加或修改字典。key存在則修改,key不存在則增加
- 通過
updateValue(value: Value, forKey key: Key) -> Value?
來增加或修改字典。規則同上。
移除Key-Value
- 通過設置下標key的Value為nil來移除。
- 通過
removeValue(forKey: Key) -> Value?
來移除,若key存在則返回value值,反之返回nil.
遍歷字典
- 使用for-in循環遍歷
- 使用
enumerate()
進行遍歷,返回字典索引和鍵值對
for (key , value) in someDict {
print("\(key):\(value)")
}
for (index , value) in someDict.enumerate() {
print("\(index):\(value)")
}
字典轉換為數組
提取字典的鍵值,并轉換為獨立的數組。
let arrayKeys = [Int](someDict.keys)
let arrayValues = [Int](someDict.values)
參考: