//html
// ViewController.swiftswift
// swift的函數和閉包網絡
//閉包
// Created by Ninesday on 16/6/23.異步
// Copyright © 2016年 Ninesday. All rights reserved.async
//ide
import UIKit函數
class ViewController: UIViewController {spa
override func viewDidLoad() {htm
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
//swift中函數調用時候第一個參數能夠省略
// print(sum(10, y: 20))
// print(sum2(num1: 10, num2: 21))
//demo2()
//demo3()
//demo4()
demo5()
}
//函數
func sum(x:Int, y:Int) ->Int {
return x + y
}
//外部參數 不會影響函數內部代碼的執行 方便閱讀
//外部參數在閉包中很重要
//沒有返回值的狀況
//1.什麼都不寫 2.Void 3,.()
func sum2(num1 x:Int, num2 y:Int) -> Int {
return x + y
}
//MARK:-閉包的定義
//先看block,一組預先準備好的代碼 在須要的時候執行 能夠當參數傳遞 出現self注意循環引用
//在swift中 函數自己就能夠作參數傳遞
//函數做爲參數的例子
//定義閉包
/// 閉包的全部代碼[參數 返回值 執行代碼]都放在{}中
//in 是用來區分函數定義和執行代碼
func demo2() {
let sumFunc = { (num1 x:Int, num2 y: Int) -> Int
in
return x + y
}
// print(sumFunc(2,3))
print(sumFunc (num1: 1, num2: 2))
}
//閉包的格式
//{(外部參數 形參列表 -> 返回值 in // 代碼執行}
// 簡單的閉包 沒有參數和返回值 和in
func demo3() {
let demo = {
print("hello")
}
demo()
}
//MARK:-閉包的演練
func demo4() {
//block 從使用場景 --一般在異步加載網絡數據 完成回調
func loadData(finish:()->()) {
dispatch_async(dispatch_get_global_queue(0, 0)) { () -> Void in
print("耗時操做\(NSThread.currentThread())")
//裏面一般加載數據
dispatch_async(dispatch_get_main_queue(), { () -> Void in
print("完成\(NSThread.currentThread())")
//執行finish回調
finish()
})
}
}
loadData { () -> () in
print("回調的代碼")
}
}
func demo5() {
//blcok的使用場景 --有參數的傳遞
func loaddata(finished:(html:String)->()) {
dispatch_async(dispatch_get_global_queue(0, 0)) { () -> Void in
print("耗時操做\(NSThread.currentThread())")
//裏面加載數據
dispatch_async(dispatch_get_main_queue(), { () -> Void in
print("完成\(NSThread.currentThread())")
finished(html: "<html><html>")
})
}
}
loaddata { (string) -> () in
print("完成回調代碼")
}
}
}
//OC中的block的
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view.
[self laodData:^(NSString *html) {
NSLog(@"回調代碼 %@",html);
}];
}
-(void)laodData:(void (^)(NSString *html)) finished {
dispatch_async(dispatch_get_global_queue(0, 0), ^{
NSLog(@"耗時操做");
dispatch_async(dispatch_get_main_queue(), ^{
NSLog(@"準備主線陳的回調");
finished(@"<html>");
});
});
}