不知道大家覺得現在對swift的了解怎么樣了~ 反正本集筆記都是我自己的小demo的總和,覺得分享出來.
- 一是讓大家更加清楚的認識到swift真的離我們越來越近了
- 二是就當自己的一個小筆記,等那天不記得回頭翻看也是另外一番滋味,記錄自己的成長,在不斷的挖掘中學習,不能每天漫無目的的亂撞,量變引起質變,每一位大牛都不是莫名的成為大牛,都要歷經小白這漫漫的長路,最終找尋到真正屬于自己的那篇空間.
廢話不多說.把今天最后的基礎內容也分享給大家,那就是swift中最為關鍵重要的也是未來項目開發的根基<函數>跟<閉包> 相信學習過swift的朋友應該都清楚的懂得當初的不易.共勉尋求真正的代碼魅力.
本篇學習目錄為:
目標
函數
定義格式
外部參數
無返回值的三種情況
閉包
閉包的定義
尾隨閉包
-
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()// 調用函數的時候,默認第一個參數名可以省略,在早期 swift 中 sum(10, 20) print(sum(10, y: 30)) print(sum2(num1: 50, num2: 30)) demo1() demo2() demo3()
}
// 沒有返回值的情況
/**
1. 什么都不寫
2. Void
3. ()日常開發中,可以什么都不寫,三種格式一定要都知道 三種類型,在閉包中會使用!
*/
func demo1() {
print("哈哈")
}func demo2() -> Void {
print("呵呵")
}func demo3() -> () {
print("嘻嘻")
}// 外部參數
/**
外部參數,不會影響到函數內部的代碼執行
作用是方便調用函數的程序員,更加明確各個參數的語義外部參數,在閉包中很重要
*/
func sum2(num1 x: Int, num2 y: Int) -> Int {
return x + y
}/**
格式
func 函數名(行參列表) -> 返回值類型
*/
func sum(x: Int, y: Int) -> Int {
return x + y
}
}
閉包的定義
定義一個函數
//: 定義一個 sum 函數func sum(num1 num1: Int, num2: Int) -> Int { return num1 + num2}sum(num1: 10, num2: 30)//: 在 Swift 中函數本身就可以當作參數被定義和傳遞let mySum = sumlet result = mySum(num1: 20, num2: 30)
定義一個閉包閉包 = { (行參) -> 返回值 in // 代碼實現 }
in
用于區分函數定義和代碼實現
//: 閉包 = { (行參) -> 返回值 in // 代碼實現 }let sumFunc = { (num1 x: Int, num2 y: Int) -> Int in return x + y}sumFunc(num1: 10, num2: 20)
最簡單的閉包,如果沒有參數/返回值,則 參數/返回值/in
統統都可以省略{ 代碼實現 }
let demoFunc = { print("hello")}
關于閉包的實戰演練
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
loadData2 { (html) -> () in
print("完成回調代碼 \(html)")
}
loadData3()
}
// `尾`隨閉包 - 不要求自己寫,但是,要求必須能看懂
// 1. 閉包最后一個參數
// 2. 函數 的 ) 前置到倒數第二個參數末尾
// 3. 最后一個逗號省略
// 補充,簡化閉包,如果沒有參數,沒有返回值,可以省略
func loadData3() {
dispatch_async(dispatch_get_global_queue(0, 0)) {
print("hehe")
}
dispatch_async(dispatch_get_global_queue(0, 0)) {
print("haha")
dispatch_sync(dispatch_get_main_queue()) {
print("主線程回調")
}
}
}
// block / 閉包的應用場景
// 通常用在異步加載網絡數據,完成回調 -> 以 參數 的形式 傳遞網絡獲取的數據
func loadData2(finished: (html: String) -> ()) {
dispatch_async(dispatch_get_global_queue(0, 0)) { () -> Void in
print("耗時操作 \(NSThread.currentThread())")
// 通常加載數據...
// 異步完成之后,通過 block 回調
dispatch_async(dispatch_get_main_queue(), { () -> Void in
print("完成 \(NSThread.currentThread())")
// 執行 finished 回調
finished(html: "<html></html>")
})
}
}
// block / 閉包的應用場景
// 通常用在異步加載網絡數據,完成回調
func loadData(finished: () -> ()) {
dispatch_async(dispatch_get_global_queue(0, 0)) { () -> Void in
print("耗時操作 \(NSThread.currentThread())")
// 通常加載數據...
// 異步完成之后,通過 block 回調
dispatch_async(dispatch_get_main_queue(), { () -> Void in
print("完成 \(NSThread.currentThread())")
// 執行 finished 回調
finished()
})
}
}
有關swift的基本語法我就總結到這里.明天我將會給大家帶來swift的面向對象的相關知識.不要急~ 希望能夠幫助那些想學而又卻無法下手的學習swift的書友們.有什么不懂得地方或者有建議的地方可以子啊下方留言,學習嘛 就是在不斷的思考中才能得到最有效的回饋.
iOS技術成長群:255032637 有愿意的小伙伴可以長期學習共勉!
學習永不止步!!!!!!