let
let常量一旦定義不能改變場景
let image = UIImage(constentsOfFile:”MyImage.png”)
let color = UIColor(red: 0.5, green: 0.0, blue: 0.5, alpha: 1.0)
打印字符串
print("\(nameInferred) on sale for \(priceInferred)!")打印語法\(your expression)
可選類型optional
默認為nil只有可選類型才能賦值為nilnil在swift中是一個確定的值,任何類型的可選類型都可以被設置為nil,不只是對象類型零院,確定有值在變量后加!來強制解析獲取值(一定要確定有一個非nil值引润,要不會報錯)
可選綁定optional binding
判斷可選類型是否包含之,如包含賦值給一個臨時常量或者變量痒玩,可以用在if和while語句中淳附,比如
if let contantName = someOptional {
? ? ? ? ? ?statements
}
if let actualNumber = Int(possibleNumber) {
print("\'\(possibleNumber)\' has an integer value of \(actualNumber)")
}
隱式解析可選類型
關鍵詞:當可選類型第一次被賦值之后確定一直有值,可聲明為隱式可選類型蠢古,要不每次都要判斷和解析可選值是非常低效的奴曙,它其實就是一個普通的可選類型,但可以被當做非可選類型來使用草讶,并不需要每次都使用解析來獲取值
let possibleString: String? = "An optional string."
let forcedString: String = possibleString! //需要驚嘆號來獲取值
let assumedString: String! = "An implicitly unwrapped optional string."
let implicitString: String = assumedString//不需要感嘆號
錯誤處理
func makeASandwich() throws {
// ...
}
do {
try makeASandwich()
eatASandwich()
} catch Error.OutOfCleanDishes {
washDishes()
} catch Error.MissingIngredients(let ingredients) {
buyGroceries(ingredients)
}
空合運算符a??b
對可選類型a進行空判斷洽糟,如果a包含值就解析否則返回一個默認值b,是對以下代碼的簡短表達式
a != nil ? a! : b
區(qū)間運算符
閉區(qū)間運算符(a...b)
for index in 1...5 {
? ?print("\(index) * 5 = \(index * 5)")
}
半開區(qū)間運算符
半開區(qū)間(a..<b)
閉包表達式
{ (parameters) -> returnType in
statements
}
閉包的函數(shù)體部分由關鍵字in引入。該關鍵字表示閉包的參數(shù)和返回值類型定義已經(jīng)完成脊框,閉包函數(shù)體即將開始颁督。
reversed = names.sort({ (s1: String, s2: String) -> Bool in
return s1 > s2
})
尾隨閉包:如果您需要將一個很長的閉包表達式作為最后一個參數(shù)傳遞給函數(shù)践啄,可以使用尾隨閉包來增強函數(shù)的可讀性浇雹。尾隨閉包是一個書寫在函數(shù)括號之后的閉包表達式,函數(shù)支持將其作為最后一個參數(shù)調用:
func someFunctionThatTakesAClosure(closure: () -> Void) {
// 函數(shù)體部分
}
// 以下是不使用尾隨閉包進行函數(shù)調用
someFunctionThatTakesAClosure({
// 閉包主體部分
})
// 以下是使用尾隨閉包進行函數(shù)調用
someFunctionThatTakesAClosure() {
// 閉包主體部分
}
reversed = names.sort() { $0 > $1 }
如果函數(shù)只需要閉包表達式一個參數(shù)屿讽,當您使用尾隨閉包時昭灵,您甚至可以把()省略掉:
reversed = names.sort { $0 > $1 }
結構體和枚舉是值類型
值類型被賦予給一個變量、常量或者被傳遞給一個函數(shù)的時候,其值會被拷貝伐谈。
類是引用類型
與值類型不同,引用類型在被賦予到一個變量烂完、常量或者被傳遞到一個函數(shù)時,其值不會被拷貝。因此,引用的
是已存在的實例本身而不是其拷貝诵棵。
等價于(===) ?和等于(==)
等價于”表示兩個類類型(class type)的常量或者變量引用同一個類實例抠蚣。
?“等于”表示兩個實例的值“相等”或“相同”
常量結構體的存儲屬性
如果創(chuàng)建了一個結構體的實例并將其賦值給一個常量,則無法修改該實例的任何屬性,即使定義了變量存儲屬性
計算屬性
計算屬性不直接存儲值,而是提供一個 getter 和一個可選的 setter,來間接獲取和設置其他屬性或變量的值。
struct Rect {
var origin = Point()
var size = Size()
var center: Point {
get {
let centerX = origin.x + (size.width / 2)
let centerY = origin.y + (size.height / 2)
return Point(x: centerX, y: centerY)
}
set(newCenter) {
origin.x = newCenter.x - (size.width / 2)
origin.y = newCenter.y - (size.height / 2)
}
}
}