swift - 闭包捕获值类型
问题描述
我在下面运行了代码,我期望print()
s 将返回零作为值类型,i
并将s
被复制到闭包中,但似乎它们是通过引用传递的。而对于 Objective-C,我们必须使用__block
属性来实现这种行为。有什么解释为什么会这样吗?
var i = 0
var s = "0"
print(i)
print(s)
let c = {
i = 1
s = "11"
}
c()
print(i)
print(s)
输出是:
1
11
解决方案
Swift 中的闭包总是通过引用来捕获变量。它相当于所有捕获的变量都是__block
.
推荐阅读
- machine-learning - LIBSVM 是否适用于许多类别和样本?
- java - Firestore DocumentReference 数据类型无法使用 Gson 库进行序列化/反序列化
- php - 注意:未定义索引:/home/webccans/public_html/index.php 中的 REDIRECT_URL
- clang - 有没有办法禁用特定的 llvm lld 警告?
- python - Python lxml 和 xslt 问题
- python - numba 给出 NumPy 的错误
- ssl - 如何在 Iris GoLang 框架中为通配符子域设置 AutoTLS
- ios - 与一个通知交互后清除所有通知
- c++ - 0x0F50DF58 处未处理的异常:0xC0000005:访问冲突读取位置 0x0047CA04
- wordpress - 机器人访问网站时可以运行 WordPress cron 作业吗?