1.可選類型Optional
- ? 可以為 nil 翠订, 峰伙!不能為nil
- 強(qiáng)制解析 myString波桩! (訪問myString)
- 自動(dòng)解析 var myString:String!
- 可選綁定 var myString:String?
循環(huán)
- while
- repeat { }while
- continue語句:停止本次循環(huán) 開始下次循環(huán)
- break :會(huì)立刻結(jié)束整個(gè)控制流的執(zhí)行
- fallthrough:如果在case執(zhí)行完后,繼續(xù)執(zhí)行下面的case剔交,需要使用fallthrough(貫穿)關(guān)鍵字冕香。
字符串
-
字符串字面量
var stringA = "Hello"
-
String 實(shí)例化
var stringB = String("Swift!");
stringA.isEmpty (判斷是否為空)
-
Siwft4.0 修改:String成Collection類型
let greeting = "Hello Mars" print(greeting.count) greeting.forEach{print($0)}
字符 Character
不能創(chuàng)建空的 Character
-
字符串連接字符
let charB: Character = "B" var str:String = "Hello" str.append(charB)
數(shù)組
-
創(chuàng)建:
var arry1: Array<Int> = Array<Int>() var someInts = [Int](repeating: 0, count: 3) var somebInts:[Int] = [10, 20, 30]
-
訪問數(shù)組:
//1 var someVar = somebInts[0] //2 Array(somebInts[0..<2])
-
修改
arrInts[2] = 50
-
刪除
//1 arrInts.remove(at: 2) //2 arrInts.removeLast()
-
遍歷數(shù)組
//1 for (index, item) in arrInts.enumerated() { print("\(index),\(item)") } //2. arrInts.forEach {print($0)} //3. for-in
-
合并數(shù)組
var ints = somebInts + arrInts
count 贾漏、 isEmpty
字典
-
創(chuàng)建
//1 var dict = [Int: String]() //key為int value為String //2 var dic:[Int: String] = [1:"One", 2:"Two", 3:"Three"]
訪問 dic[key]
-
修改字典
//1.updateValue var oldVal = dic.updateValue("One 的新值", forKey:1) var dd = dic[1] //2.通過key來修改 dic[1] = "最新 One值" print(String(describing:dic[1]))
-
移除key-value對(duì)
//1.removeValue var removedValue = dic.removeValue(forKey: 2) //2. dic[2] = nil
-
遍歷字典
//1. for-in //2. enumerate
-
字典轉(zhuǎn)數(shù)組
let dictkeys = [Int](someDict.keys) let dictValues = [String](someDict.values)
count , isEmpty
函數(shù)
- 常量,變量及I/O參數(shù)
如果想要聲明一個(gè)變量參數(shù)萤皂,可以在參數(shù)定義前加 inout 關(guān)鍵字葫督,這樣就可以改變這個(gè)參數(shù)的值了竭鞍。
-
當(dāng)傳入的參數(shù)作為輸入輸出參數(shù)時(shí),需要在參數(shù)名前加 & 符橄镜,表示這個(gè)值可以被函數(shù)修改偎快。
func swapTwoInts(_ a: inout Int, _ b: inout Int) { let temporaryA = a a = b b = temporaryA } var x = 1 var y = 5 swap(&x, &y)
2.嵌套函數(shù)
func qiantaohanshu(fordec total: String) -> (String) -> String {
func neihanshu (haha: String) -> String{
return total + haha
}
return neihanshu
}
let diaoyong = qiantaohanshu(fordec: "天啊")
diaoyong("好的")
qiantaohanshu(fordec: "我是")("徐征")
//打印結(jié)果為 我是徐征
閉包 Closures
-
表達(dá)式
let divide = {(val1: Int, val2: Int) -> Bool in return val1 > val2 } let result = divide(20,30) print(result)
尾隨閉包:尾隨閉包是一個(gè)書寫在函數(shù)括號(hào)之后的閉包表達(dá)式,函數(shù)支持將其作為最后一個(gè)參數(shù)調(diào)用
閉包是引用類型:這也意味著如果您將閉包賦值給了兩個(gè)不同的常量/變量洽胶,兩個(gè)值都會(huì)指向同一個(gè)閉包:
集合 Set
var vowel: Set<Character> = ["a", "e", "i", "o", "u"]
vowel.count
vowel.isEmpty
vowel.contains("a")
type(of: vowel.remove("a"))
vowel.insert("a")
//vowel.removeAll()
for character in vowel.sorted() {
print(character)
}
//
vowel.forEach{print($0)}
結(jié)構(gòu)體 struct 枚舉 enum
- 都是值類型
類 Class
- 引用類型
- 恒等運(yùn)算符 ===:如果兩個(gè)常量或者變量引用同一個(gè)類實(shí)例則返回 true
- 不恒等運(yùn)算符 !== 如果兩個(gè)常量或者變量引用不同一個(gè)類實(shí)例則返回 true
屬性
-
延遲存儲(chǔ)屬性 lazy :
('var' 關(guān)鍵字是必須的)
class samples { lazy var no = number() //'var' 關(guān)鍵字是必須的 } class number { var name = "是小鳥" } var firstSample = samples() print(firstSample.no.name)
計(jì)算屬性 getter setter
只讀計(jì)算屬性 getter
-
屬性觀察值: 可以為除了延遲存儲(chǔ)屬性之外的其他存儲(chǔ)屬性添加屬性觀察器晒夹,也可以通過重載屬性的方式為繼承的屬性(包括存儲(chǔ)屬性和計(jì)算屬性)添加屬性觀察器。
注意: 不需要為無法重載的計(jì)算屬性添加屬性觀察器姊氓,因?yàn)榭梢酝ㄟ^ setter 直接監(jiān)控和響應(yīng)值的變化丐怯。
//willSet 在設(shè)置新的值之前調(diào)用 //didSet 在新的值被設(shè)置之后立即調(diào)用 //willSet和didSet觀察器在屬性初始化過程中不會(huì)被調(diào)用 class Samplepgm { var counter: Int = 0 { willSet(newTotal) { print("計(jì)數(shù)器:\(newTotal)") } didSet { if counter > oldValue { print("新增數(shù)\(counter - oldValue)") } } } } let NewCounter = Samplepgm() NewCounter.counter = 100 NewCounter.counter = 800
-
類型屬性:類型屬性是作為類型定義的一部分寫在類型最外層的花括號(hào)({})內(nèi)。
使用關(guān)鍵字 static 來定義值類型的類型屬性翔横,關(guān)鍵字 class 來為類定義類型屬性读跷。
//static struct StructName { static var storedTypeProperty = " " static var computedTypeProperty: Int { //這里返回 一個(gè) Int 值 return 30 } } //class class ClassNames { class var computedTypeProperty: Int { //這里返回一個(gè) Int 值 return 27 } }
- 類似于實(shí)例的屬性,類型屬性的訪問也是通過點(diǎn)運(yùn)算符(.)來進(jìn)行禾唁。但是效览,類型屬性是通過類型本身來獲取和設(shè)置无切,而不是通過實(shí)例