一、常量與變量
1、使用之前必須聲明
let constant = "常量"
var variable = "變量"
2、一行聲明多個變量和多個變量賦值
var red, green, blue: Double
var x = 0.0, y = 0.0, z = 0.0
3、變量、常量名的命名
- 不能以數字開頭
- 如果非要使用Swfit關鍵字,則需要關鍵字前后添加反引號(`)
- 如果在使用printf打印輸出時不想換行,可以設置terminator參數為""
let (`let`) = "let關鍵字"
print("輸出", terminator:"")
print("是是是\(XXX)")
4、swift注釋
- swift中的多行注釋可以允許嵌套注釋
/*XXXXXXXXX
XXXXXXXXXXX
/*XXXXXXXXX
*/
XXXXXXXXXXX
*/
二、整形、浮點型
1、浮點型:Double、Float(優先使用Double)
Double:精確度至少15位數字
Float :精確度最多只有6位數字
2、整形字面量
- 一個10進制,沒有前綴
- 一個2進制,0b為前綴
- 一個8進制,0o為前綴
- 一個16進制,0X為前綴
let decimalInter = 17
let binaryInteger = 0b10001
let octalInteger = 0c21
let hexadecimalInteger = 0x11
3、整型范圍
Int8 :-128 ~ 127
UInt8 : 0 ~ 255
4、類型別名(Type Aliases)
typealias AudioSample(類型別名) = UInt16
5、元祖(Tuple)
- 元祖內部可以是任意類型的值
- 元祖內訪問元素下標從0開始
- 定義元祖時,給元祖內部元素命名
- 元祖不適合創建復雜的數據結構,它在臨時組織值時非常有用
//創建元祖
let http404Error = (404, "Not Found")
let http404Error = (statusCode:200, description: "OK")
//分解元祖
let (statusCode, statusMessage) = http404Error
//忽略元祖一部分
let (statusCode, _) = http404Error
//通過下標來訪問元祖元素
print("this is \(http404Error.0)")
//通過名字來訪問元祖元素
print(http404Error.statusCode)
6、可選類型(Optionals)
- 給可選變量賦值為nil,表示它沒有值
- 可選常量或者變量如果沒有賦值,它們會自動被置為nil
- 表示一個確定的值,用來表示值缺失,任何類型的可選狀態都可以被置為nil
- 通過添加!來強制解包
- 在一個if語句中,可以包含多個可選綁定或者多個布爾條件,每一個之間使用,隔開,只要有任意一個可選綁定的值為nil或者任意一個布爾值為false,則整個if條件判斷為false,也可以使用嵌套if語句來處理
var name: String? = "guojie"
print("my name is \(name!)")
//可選綁定
if let constantName = someOptional {
statements
}
if let firstNumber = Int("400"), let secondNumber = Int("43"), firstNumber < secondNumber && secondNumber < 100 {
print("陳工")
}else{
print("失敗")
}
if let firstNumber = Int("4") {
if let secondNumber = Int("42") {
if firstNumber < secondNumber && secondNumber < 100 {
print("成功")
}
}
}
7、錯誤處理(error handing)
- 通過使用錯誤處理來處理中程序可能出現的錯誤
- 一個函數通過在聲明時添加throws關鍵字來拋出錯誤,同時在調用可能出現錯誤的函數時,將try關鍵字放置前
func canThrowAnError() throws {
}
do {
try canThrowAnError()
//沒有錯誤信息拋出
} catch {
有一個錯誤信息拋出
}
- do語句將錯誤能被傳播到更多個catch從句中
func makeASandwich() throws {
//…………
}
do {
try makeASandwich()
eatASandwich()
} catch SandwichError.outofCleanDishes {
washDishes()
} catch SandwichError.missingIngredients(let ingredients) {
buyGroceries(ingredients)
}
8、斷言和先決條件
- 斷言只是在Debug環境中運行檢查,先決條件則在Debug和Release環境中運行檢查
- 如果編譯在unchecked mode(-Ounchecked),先決條件不會被檢查,斷言和先決條件都是true
let age = -3
//斷言(因為-3不>=0,所以斷言失敗)
assert(age >= 0, "A person's age can't be less than zero")
//不帶信息的斷言
assert(age>= 0)
//如果代碼已經檢查了條件,則使用
assertionFailure(_:file:line:)
//先決條件
precondition(index > 0, "Index must be greater than zero")
//表示先決條件發生失敗
preconditionFailure(_:file:line:)
9、致命失敗(fatalError)
- 即使編譯處于unchecked mode(-Ounchecked)時,fatalError仍然會被執行
- 在開發早期,只有方法聲明,沒有實現,可以使用fatalError(_:file:line:)
- 使用fatalError("Unimplemented")函數作為具體實現,不會被斷言和先決條件那樣被優化掉,可以確保代碼執行到沒有實現的方法時,程序會被中斷
//致命失敗(fatalError)
fatalError(_:file:line:)