美文网首页Swift
Swift的闭包捕获变量和OC的Block捕获变量

Swift的闭包捕获变量和OC的Block捕获变量

作者: 糖糖uzi | 来源:发表于2020-08-05 20:30 被阅读0次

closure捕获局部变量

    var a = 10
    
    let closure = {
        print("closure=", a)
    }
    
    a = 20
    print("out=", a)
    closure()
    print("out=", a)

打印

out= 20
closure= 20
out= 20

说明swift指的捕获是在执行的时候再捕获,当代码执行到 closure(),对变量a进行捕获,捕获到的变量是修改之后的值,所以两次打印一样

OC的block捕获局部变量

int a = 10;
void (^block)(void) = ^{
    NSLog(@"a==%d",a);
};
a = 20;
block();
NSLog(@"a==%d",a);

打印

a==10
a==10

从这个打印可以看出 block捕获发生在第三行,代码执行到第三行block内部对变量a进行了拷贝,所以不受后面赋值的影响

用swift实现跟OC相同的值捕获

使用[]符号 , 这种实现在Swift里叫捕获列表,capturing list
看如下代码

var a = 10

let closure = { [a] in
    print("closure=", a)
}

a = 20
print("out=", a)
closure()
print("out=", a)

这时候的打印

out= 20
closure= 10
out= 20

打印结果跟block捕获相同,说明捕获发生在定义closure内部;

相关文章

  • Swift的闭包捕获变量和OC的Block捕获变量

    closure捕获局部变量 打印 说明swift指的捕获是在执行的时候再捕获,当代码执行到 closure(),对...

  • OC基础-Block(2)

    OC基础-Block(2)Block的变量捕获为了保证block内部能够正常访问外部的变量,block有个变量捕获...

  • 06.1-OC中block的变量捕获

    block变量捕获 在讲解block变量的捕获之前,我们先来看看OC中的变量大致分为哪几类: 局部变量自动变量静态...

  • Swift入门基础5——闭包

    何为闭包? Swift中的闭包和OC中的block很相似(其实也有其他语言有闭包的概念)。所谓闭包,就是可以捕获其...

  • block:block捕获变量

    一、block捕获变量根儿上的东西 1、block会捕获局部变量 2、block不会捕获全局变量二、block捕获...

  • Swift编程八(闭包)

    案例代码下载 闭包 函数闭包可以从定义它们的上下文中捕获和存储对任何常量和变量的引用,Swift处理捕获的所有内存...

  • Swift编程八(闭包)

    案例代码下载 闭包 函数闭包可以从定义它们的上下文中捕获和存储对任何常量和变量的引用,Swift处理捕获的所有内存...

  • swift闭包中的值捕获

    闭包可以捕获和存储其所在上下文中任意常量和变量的引用。被称为包裹常量和变量。 Swift 会为你管理在捕获过程中涉...

  • 8.闭包

    闭包可以捕获和存储其所在上下文中任意常量和变量的引用。被称为包裹常量和变量。 Swift 会为你管理在捕获过程中涉...

  • Block变量捕获详解(一)

    什么是Block变量捕获block变量捕获就是在block内部创建一个变量来存放外部变量什么是值捕获block将外...

网友评论

    本文标题:Swift的闭包捕获变量和OC的Block捕获变量

    本文链接:https://www.haomeiwen.com/subject/pdiurktx.html