一、基礎部分
1.類型別名
typealias AudioSample = UInt16
var maxAmplitudeFound = AudioSample.min
2.if條件語句
swift中,if條件語句里面必須是boolen類型的值,和oc不同
3.元組(tuples)
元組里面類型任意,并不要求相同的類型
let http404Error : (Int, String) = (404, "Not Found")
let (statusCode, statusMessage) = http404Error
print("The status code is \(statusCode)")
print("The status message is \(statusMessage)")
如果一只需要一部分元組的值,分解的時候可以把要忽略的部分用下劃線_標記
let (justTheStatusCode,"下劃線") = http404Error
元組可以通過下標來訪問
print("The status code is \(http404Error.0)")
元組可以給元素明明,并且通過命名取值
let http200Status = (statusCode : 200, description: "OK")
print("The status code is \(http200Status.statusCode)")
4.可選類型
let possibleNumber = "123"
let convertedNumber = Int(possibleNumber)
//這里轉換類型所得到的convertedNumber是一個可選類型的值,
print(convertedNumber!)
//nil
var serverResponseCode : Int? = 404
serverResponseCode = nil
//注意: nil不能用于非可選的常量和變量,如果代碼中有常量或者變量需要處理值缺失的情況,請把它們聲明稱對應的可選類型.
if 語句以及強制解析
if convertedNumber != nil {
print("convertedNumber contains some integer value.")
}
//如果你確定一個可選類型確實包含值之后,可以在其后面加 ! ,表示強制解包,強制解包是非常危險
if convertedNumber != nil {
print("convertedNumber contains value \(convertedNumber!)")
}
5.可選綁定
if let convertedNumber = convertedNumber {
print("可選綁定\(convertedNumber)")
}
//打印結果 可選綁定123
```
6.包含多個可選綁定或者多個布爾條件在一個if語句中,用逗號分開。只要有人一個可選綁定的值為nil,或者任意一個布爾條件為false,則整個if條件判斷為false,這時你就需要使用嵌套if條件語句來處理。
```
if let firstNumber = Int("0"), let secondNumber = Int("52"),firstNumber < secondNumber && secondNumber < 100 {
print("\(firstNumber) < \(secondNumber) < 100")
//打印結果 0 < 52 < 100
```
7.隱式解析可選類型
```
let possibleString: String? = "An optional string."
let forcedString: String = possibleString!//需要感嘆號來取值
let assumedString: String! = "An implicitly unwrapped optional string."
let implicitString: String = assumedString//不需要感嘆號
```
使用隱式解析可選類型后,仍然可以把隱式解析可選類型當作普通可選類型來判斷它是否含值
```
if assumedString != {
print(assumedString)
}
```
也可以再可選綁定中使用隱式解析可選類型來檢查并解析他的值
```
if let definiteString = assumedString {
print(definiteString)
}
```
8.錯誤處理
```
func canThrowAnError() throws {
//這個函數有可能拋出錯誤
}
do {
try canThrowAnError()
//沒有錯誤消息拋出
} catch {
//有一個錯誤消息拋出
}
```
二、基本運算符
1.swift有恒等===和不恒等!== 用來判斷兩個對象是否引用同一個對象實例(兩個累需要遵守一個協議)
2.比較元組大小會按照從左到右,逐值比較的方式,直到發現有兩個值不等時停止。如果所有的值都相等,那么這一對元組我們就稱他們是相等的(swift標準庫中只能比較一個以內元素的元組比較函數)
3.空合運算符( a ?? b) a 表示可選類型,b表示當可選類型沒有值時,默認使用的值
4.區間運算符 閉區間 1...5表示1、2、3、4、5 ,1..<5表示1、2、3、4
三、字符串和字符
1.判斷字符串是否為空
```
var emptyString = ""
var anotherEmptyString = String()
if emptyString.isEmpty {
print("Nothing to see here")
}
if anotherEmptyString.isEmpty {
print("Nothing to see here1")
}
```
2.字符串是值類型,如果你創建了一個新的字符串,那么當其進行常量,變量賦值操作,或者再函數方法中傳遞時,會進行值拷貝。再任何情況下,都會對已有的字符串值創建新副本,并對新副本進行傳遞或賦值操作。
3.使用字符
```
for character in "Dog!".character {
print(character)
}
```
4.字符串可以通過傳遞一個值類型為Character的數組作為自變量來初始化
```
let catCharacters: [Character] = ["a", "b"]
let cat = String(catCharacters)
print(cat)
```
打印結果為"ab"
5.字符串的索引
```
let greeting = "Guten Tag"
print(greeting[greeting.startIndex])
print(greeting[greeting.index(after: greeting.startIndex)])
print(greeting[greeting.index(greeting.startIndex, offsetBy: 7)])
```
打印結果為G,u,a
6.indices屬性
使用chaaracters屬性的indices屬性會創建一個包含全部索引的范圍(Range)
```
for index in greeting.characters.indices {
print("\(greeting[index])")
}
```
打印結果為G、u、t、e、n、T、a、g
四、集合
1.數組
創建一個帶有默認值的數組
```
var threeDoubles = Array(repeating: 1.1, count: 3)
print(threeDoubles)
//打印結果為 [1, 1, 1]
```
2.數組可以相加
```
var twoDoubles = Array(repeating: 3, count: 2)
print(threeDoubles + twoDoubles)
//打印結果為[1, 1, 1, 3, 3]
```