首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >避免在闭包中捕获值副本的最佳方法

避免在闭包中捕获值副本的最佳方法
EN

Stack Overflow用户
提问于 2015-05-05 17:27:41
回答 3查看 1.1K关注 0票数 4
代码语言:javascript
运行
复制
struct Foo {

    var i = 0 { didSet { println("Current i: \(i)") } }

    func delayedPrint() {
        dispatch_async(dispatch_get_main_queue(), { _ in
            println("Closure i: \(self.i)")
        })
    }

    mutating func foo() {
        delayedPrint()
        i++
    }
}

现在的输出

代码语言:javascript
运行
复制
var a = Foo()
a.foo()

代码语言:javascript
运行
复制
Current i: 1
Closure i: 0 // I want current value here.

我想知道什么是最好的方法,以避免捕获一个象牙副本。

编辑1

是的,搬去上课是我想到的第一件也是唯一一件事,但是.这一次愚弄我以为可以用结构来实现.为什么会起作用?

代码语言:javascript
运行
复制
mutating func foo() {
    delayedPrint()
    dispatch_async(dispatch_get_main_queue(), { _ in
        println("From foo: \(self.i)")
    })
    delayedPrint()
    i++
}

输出:

代码语言:javascript
运行
复制
Current i: 1
Closure i: 0
From foo: 1
Closure i: 0
EN

Stack Overflow用户

发布于 2015-05-05 17:59:49

我认为这里必须使用类而不是结构,因为结构是通过复制传递的,而类是通过引用传递的。

票数 4
EN
查看全部 3 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30059508

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档