Swift 中的基礎文法(二),swift基礎文法
1.Swift 中的函數
/// 函數的定義 /// /// - Parameters: /// - x: 形參 /// - y: 形參 /// - Returns: 傳回值 func sum(x: Int, y: Int) -> Int { return x + y }
print(sum(x: 10, y: 20))
/* 外部參數就是在形參前面加了一個字 外部參數不會影響函數內部的細節 外部參數會讓外部調用看起來更加直觀 外部參數如果使用了'_',在外部調用函數時,會忽略形參的名字 "_" 就是可以忽略任意不感興趣的內容 */ func sum1(num1 x: Int, num2 y:Int) -> Int { return x + y; }
print(sum1(num1: 10, num2: 20))
func sum2(_ x: Int, _ y:Int) -> Int { return x + y; } print(sum3())
設定預設值的函數
// 預設值 func sum3(x: Int = 1, y: Int = 2) -> Int { return x + y }
這裡比較靈活
print(sum3(x: 10, y: 20))
print(sum3(x: 10))
print(sum3(y: 20))
無傳回值的函數
func demo1() { print("哈哈") } func demo2() -> (){ print("呵呵") } func demo3() -> Void { print("嘻嘻") }
demo1()
demo2()
demo3()
2.閉包
// 1.閉包,最簡單的閉包 //n 如果沒有參數,沒有傳回值 可以省略 連 in 都一起省略 // option + click let b1 = { print("hello") } b1()
// 帶參數的閉包 //閉包中,參數,傳回值 實現的代碼都是寫在{}中 // 需要使用一個關鍵字 “in” 分隔定義和實現 // {形參列表 -> 傳回值類型 in // 實現代碼} let b2 = { (x: Int) -> () in print(x) } b2(100)
//帶參數 帶會傳回值的閉包 let b3 = { (x: Int) -> Int in return x + 1 } print(b3(10))
需要注意的是,
// 如果函數的最後一個參數是閉包 函數參數可以提前結束,最後一個參數直接使用{}封裝閉包的代碼
3.swift 解決循環參考的辦法
1.仿照OC 解決
//弱引用的對象 又一次執行 nil的機會 weak var weakSelf = self loadData { (result) in print(result,weakSelf) } }
//[weak self] 和 __weak typeof(self) 作用類似 -> 對象被回收是 記憶體位址會自動指向nil 更加安全 推薦使用這種方式 func methodInSwift1() { loadData { [weak self] (result) in print(result,self) } }
// [unowned self] 和 __unsafe__retained作用類似 -> 對象被回收是 記憶體位址不會自動指向nil 會造成野指標訪問 func methodInSwift2() { loadData { [unowned self] (result) in print(result,self) } }