1 常量和變量(Constants and Variables)
// 聲明:常量 let 變量 var
let constants = 10
var variables = 0
// 多個(gè)聲明
var x = 0.0, y = 0.0, z = 0.0
// 類型標(biāo)注(type annotation)
var welcomeMessage: String
// 常量和變量的命名
// 常量與變量名不能包含數(shù)學(xué)符號(hào)谜悟,箭頭倔叼,保留的(或者非法的)Unicode 碼位埋酬,連線與制表符。也不能以數(shù)字開頭。
// 常量與變量不能修改類型也不能互換
// 使用反引號(hào)(`)來使用保留關(guān)鍵字
let π = 3.14159
let 你好 = "你好世界"
let `let` = "hihi"
// 輸出常量和變量 `func print(_ items: Any..., separator: String = default, terminator: String = default)` 三種參數(shù):輸出項(xiàng)、分隔符、結(jié)束符
print(1,`let`, separator: ",", terminator: "<br/>")
print(x, y, z, `let`)
// 字符串插值(string interpolation)
print("The current value of constants is \(constants)")
2 注釋(Comment)
// 單行注釋
/*
/*
多行注釋可以嵌套在其它的多行注釋之中
*/
*/
3 分號(hào)(Semicolons)
單行單挑語(yǔ)句不一定需要座舍,單行多條語(yǔ)句必須
let cat = "?"; print(cat)
4 整數(shù)(Integers)
U代表無符號(hào)
Int類型與當(dāng)前系統(tǒng)的位數(shù)相同
UInt8.max
UInt8.min
Int8.max
Int32.max
UInt32.max
Int64.max
UInt64.max
Int.max
5 浮點(diǎn)數(shù)(Floating-Point Numbers)
Double(11.1) // 64位
Float(11.1) // 32位
6 類型安全(type safe)和類型推斷(type inference)
let meaningOfLife = 42 // meaningOfLife 會(huì)被推測(cè)為 Int 類型
let pi = 3.14159 // pi 會(huì)被推測(cè)為 Double 類型(優(yōu)先選擇 Double 而不是 Float )
7 數(shù)值型字面量(Numeric Literals)
// 整數(shù)字面量
15
0b1111 // 二進(jìn)制15
0o17 // 八進(jìn)制15
0xf // 十六進(jìn)制15
// 浮點(diǎn)字面量
1.025e2 // 1.025*10^2
1.025e-2 // 1.025*10^-2
0xbp3 // 11*2^3
0xbp-3 // 11*2^-3
0xC.3p0 // (12+3/16)*2^0
100_000 // _增強(qiáng)可讀性
8 數(shù)值型類型轉(zhuǎn)換(Numeric Type Conversion)
// 整數(shù)轉(zhuǎn)換
let twoThousand: UInt16 = 2_000
let one: UInt8 = 1
let twoThousandAndOne = twoThousand + UInt16(one) // `UInt16`有一個(gè)構(gòu)造器,接受`UInt8`類型的參數(shù)生成`UInt16`
// 整數(shù)和浮點(diǎn)數(shù)轉(zhuǎn)換
let three = 3
let pointOneFourOneFiveNine = 0.14159
let pi2 = Double(three) + pointOneFourOneFiveNine
let integerPi = Int(pi2)
let pi3 = 3 + 0.14159 // 字面量沒有特定的類型陨帆,所以可以直接相加
9 類型別名(type aliases)
typealias AudioSample = UInt16
AudioSample.max
10 布爾值
true
false
11 元組(tuples)
把多個(gè)值組合成一個(gè)復(fù)合值
// 元組在臨時(shí)組織值的時(shí)候很有用曲秉,但是并不適合創(chuàng)建復(fù)雜的數(shù)據(jù)結(jié)構(gòu)。
let http404Error = (404, "Not Found") // 一個(gè)類型為 (Int, String) 的元組歧譬, 用于描述 HTTP 狀態(tài)碼
let (statusCode, statusMessage) = http404Error // 元組的內(nèi)容分解(decompose)
let (justTheStatusCode, _) = http404Error
http404Error.0 // 下標(biāo)訪問
let http200Status = (statusCode: 200, description: "OK") // 給元組元素命名
http200Status.description
12 可選類型(optionals)
// 聲明一個(gè)可選常量或者變量但是沒有賦值岸浑,它們會(huì)自動(dòng)被設(shè)置為 nil
var optionalString: String? // optionalString的類型要么是String,要么是nil
let possibleNumber = "123"
let convertedNumber = Int(possibleNumber) // convertedNumber 被推測(cè)為可選的`Int`
// if 語(yǔ)句以及強(qiáng)制解析
// 使用 if 語(yǔ)句和 nil 比較來判斷一個(gè)可選值是否包含值
if convertedNumber != nil {
print("convertedNumber has an integer value of \(convertedNumber!).") // `!`稱為可選值的強(qiáng)制解析(forced unwrapping)
}
// optionalString! 報(bào)錯(cuò)瑰步, 使用!來強(qiáng)制解析值之前矢洲,一定要確定可選包含一個(gè)非nil 的值。
// 可選綁定(optional binding)
if let actualNumber = Int(possibleNumber) { // 如果`Int(possibleNumber)`強(qiáng)制解析的值不是nil缩焦,就賦值給actualNumber读虏,并且語(yǔ)句為ture
print("\'\(possibleNumber)\' has an integer value of \(actualNumber)")
} else {
print("\'\(possibleNumber)\' could not be converted to an integer")
}
var someOptional: String? = "some"
var someOtherOptional: String?
if let constantName = someOptional, let anotherConstantName = someOtherOptional{
print("多個(gè)可選綁定可以用逗號(hào)分隔, 需要每一個(gè)語(yǔ)句都為true")
}
// 隱式解析可選類型(implicitly unwrapped optionals): 一個(gè)可以自動(dòng)解析的可選類型
let possibleString: String? = "An optional string."
let forcedString: String = possibleString! // 需要驚嘆號(hào)來獲取值
let assumedString: String! = "An implicitly unwrapped optional string."
let implicitString: String = assumedString // 不需要感嘆號(hào)
if assumedString != nil {
print(assumedString)
}
13 錯(cuò)誤處理
func canThrowAnErrow() throws {
// 這個(gè)函數(shù)有可能拋出錯(cuò)誤
}
do {
try canThrowAnErrow() // 沒有錯(cuò)誤消息拋出
} catch {
// 有一個(gè)錯(cuò)誤消息拋出
}
enum myError: Error {
case OutOfCleanDishes
case MissingIngredients
}
func makeASandwich() throws {
// ...
throw myError.OutOfCleanDishes
}
do {
try makeASandwich()
} catch myError.OutOfCleanDishes {
// washDishes()
} catch myError.MissingIngredients{
// buyGroceries
}
14 斷言(assertion)
let age = -3
//assert(age >= 0, "A person's age cannot be less than zero")
playground文件在andyRon/LearnSwift