【问题标题】:inout parameter in SwiftSwift 中的 inout 参数
【发布时间】:2021-06-29 09:41:12
【问题描述】:

在尝试研究 ionut 参数时,我遇到了一个示例 code.

此代码抛出错误:

“执行被中断,原因:信号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)

请解释为什么会出现这个错误以及如何修复它?

【问题讨论】:

    标签: swift


    【解决方案1】:

    错误应该在堆栈跟踪的顶部:

    Simultaneous accesses to 0x109fac098, but modification requires exclusive access.
    

    当您将char1 作为inout 参数传递给changeChar 时,在该函数返回之前以任何其他方式访问char1 都是内存冲突。

    有关详细信息,请参阅SE-176 Enforce Exclusive Access to Memory,它在 Swift 4 中添加了此限制。

    【讨论】:

    • 是的,谢谢,现在我明白了。就在函数内部,您无法访问 char 1 变量。我现在会知道的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多