【问题标题】:Swift closures change captured variableSwift 闭包更改捕获的变量
【发布时间】:2016-07-21 16:43:19
【问题描述】:

我正在使用像

这样的闭包
{ [capturedVar] otherVar in
    // Some code here
}

当我尝试更改 captureVar 时,会出现一个错误,说它是一个常量,无法更改。有什么方法可以更改闭包内的捕获变量(我需要将原始变量更改为,因此不能选择复制)?

【问题讨论】:

  • 不要捕获它...
  • @MartinR,天哪,好简单

标签: swift lambda reference closures


【解决方案1】:

从 Swift 2 开始,捕获的变量始终是常量,并且无法更改此行为。

您可以通过这种方式更改闭包内的变量(这是一种技巧):

{   [capturedConst] otherVar in
    var capturedVar = capturedConst
    // Some code here
}

您还表示您也想更改原始变量:

在这种情况下,我建议您检查 inout parameter definition,或者最终从您的闭包中返回新更改的变量。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-28
    • 1970-01-01
    • 2022-01-15
    • 2014-03-15
    相关资源
    最近更新 更多