swift中閉包和OC的block的對比

//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>");

        });

    });

}

相關文章
相關標籤/搜索