swift - Swift 中的 inout 参数
问题描述
在尝试研究 ionut 参数时,我遇到了一个 代码示例。
此代码引发错误:
“执行被中断,原因:信号 SIGABRT。进程已留在中断点,使用“线程返回 -x”返回表达式评估之前的状态。”
但是,当尝试对实际项目进行 debag 时,po char 1。
var num1: Int = 1
var char1 = "a"
func changeNumber(num: Int) {
var num = num
num = 2
print(num) // 2
print(num1) // 1
}
changeNumber(num: num1)
func changeChar(char: inout String) {
char = "b"
print(char) // b
print(char1) // b
}
changeChar(char: &char1)
请解释为什么会出现此错误以及如何解决?
解决方案
错误应该在堆栈跟踪的顶部:
Simultaneous accesses to 0x109fac098, but modification requires exclusive access.
当您char1
作为inout
参数传递给它时,在该函数返回之前,以任何其他方式changeChar
访问都会违反内存。char1
有关详细信息,请参阅SE-176 Enforce Exclusive Access to Memory,它在 Swift 4 中添加了此限制。
推荐阅读
- javascript - 使用 React + Redux 时的重定向
- angular - 响应式表单上的输入数组
- visual-studio-code - FreeBSD 是否有任何 VS 代码扩展?
- flutter - Flutter PagedListView 在渲染时不保留动态小部件
- python - 在 pandas 中,如何创建一个将 0 或 1 值捕获为字符串列表的新列?
- docker - Google Cloud 上的 Docker 容器卷绑定
- docker - 如何在 docker 中配置 ksqldb BASIC 身份验证
- python - 过滤网络中的节点,重新着色未选择的节点
- terraform - 是否存在通过不同环境(从开发到生产)推广 Terraform .tfplan 文件的可接受的工作流程方案?
- linux - 为什么汇编中的可执行文件有很大的尺寸?