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