swift中闭包和OC的block的对比

//

//  ViewController.swift

//  swift的函数和闭包

//

//  Created by Ninesday on 16/6/23.

//  Copyright © 2016年 Ninesday. All rights reserved.

//

import UIKit

class ViewController: UIViewController {

override func viewDidLoad() {

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

});

});

}

时间: 2024-08-06 05:16:35

swift中闭包和OC的block的对比的相关文章

swift中闭包 OC中Block 解决循环引用

OC 中 全局宏定义 #define WS(weakSelf)  __weak __typeof(&*self)weakSelf = self; 用法如下: WS(weakself) [self.tableView addHeaderWithCallback:^{ [weakself requestMemberList]; }]; swift 在比闭包 中使用 weakSelf weak var weakSelf = self demo4 {     // 使用?的好处 就是一旦 self 被释

swift中闭包的学习。

在swift中的闭包等同于OC中的block,它的用途就是在于可以包装一段代码在必要的时候进行调用. 闭包定义:  {(类型列表) -> 返回值 in // 多条swift语句 // 执行代码  insert coding } 实际创建闭包代码如下: 1 var square = {(value1 value1:Int,value2 value2:Int)->Int in 2 // 代码块 3 if value1>value2{ 4 return value1 5 } 6 return

swift中闭包的循环引用

首先我们先创造一个循环引用 var nameB:(()->())? override func viewDidLoad() { super.viewDidLoad() let bu = UIButton(type: .ContactAdd) bu.addTarget(self, action: "tap", forControlEvents: .TouchUpInside) view.addSubview(bu) run { print("name") sel

Swift中混编OC第三方库

现在Swift的第三方库还比较少,有时候需要使用OC的第三方库,其实也是很容易的.   我们使用如下步骤: 1.新建的Swift项目,第一次创建OC文件时会询问是否生成 桥接头,选择是的话会生成一个桥接头文件,文件如图:   (项目名-Bridge-Header.h)   2.在其中的#import想要在项目中使用的OC头文件即可使用   3.使用Swift语法在项目中这样使用: 即可

swift中闭包的使用(类似与block的做法) 闭包传值

需要闭包的类 import UIKit //定义闭包类型(特定的函数类型函数类型) typealias InputClosureType = (String) -> Void protocol SecondViewControllerDelegate: NSObjectProtocol{ func fetchBackString(str: String) } class SecondViewController: UIViewController { @IBOutlet weak var inp

Swift3.0 函数闭包与OC Block

刚接触Swift,如有不对的点,欢迎指正.转载请说明出处 Swift中定义一个基本函数 //定义一个函数,接收一个字符串,返回一个String类型的值 func test(name:String) -> String { return ("输出了\(name)") } //通用形式 func name(parameters) -> return type { function body } Swift 中基本的闭包函数与OC中Block的相似点 带参闭包 //OC中Bloc

Swift 中的利刃,函数和闭包

input[type="date"].form-control,.input-group-sm>input[type="date"].input-group-addon,.input-group-sm>.input-group-btn>input[type="date"].btn,input[type="time"].input-sm,.form-horizontal .form-group-sm input

Swift中的闭包(Closure) 浅析

转载自:http://www.devtalking.com/articles/closure-expressions-in-swift/ 闭包在Swift中非常有用.通俗的解释就是一个Int类型里存储着一个整数,一个String类型包含着一串字符,同样,闭包是一个包含着函数的类型.有了闭包,你就可以处理很多在一些古老的语言中不能处理的事情.这是因为闭包使用的多样性,比如你可以将闭包赋值给一个变量,你也可以将闭包作为一个函数的参数,你甚至可以将闭包作为一个函数的返回值.它的强大之处可见一斑. 在S

Swift中的闭包(Closure)[转]

闭包在Swift中非常有用.通俗的解释就是一个Int类型里存储着一个整数,一个String类型包含着一串字符,同样,闭包是一个包含着函数的类型.有了闭包,你就可以处理很多在一些古老的语言中不能处理的事情.这是因为闭包使用的多样性,比如你可以将闭包赋值给一个变量,你也可以将闭包作为一个函数的参数,你甚至可以将闭包作为一个函数的返回值.它的强大之处可见一斑. 在Swift的很多文档教材中都说函数是“一等公民”,起初我还不是很理解“一等公民”是什么意思,但当我理解了闭包以及它的强大功能后,我恍然大悟.