我在以下代码中使用swift inout参数感到有些失落:
var shouldContinue: Bool = true
func doSomeWork1(shouldContinue: inout Bool)
{
while shouldContinue
{
// ERROR: the compiler wants: doSomeWork2(shouldContinue: &shouldContinue)
doSomeWork2(shouldContinue: shouldContinue)
}
}
func doSomeWork2(shouldContinue: inout Bool)
{
while shouldContinue
{
}
}
为什么编译器需要
doSomeWork2(shouldContinue: &shouldContinue)
而不是the compiler wants: doSomeWork2(shouldContinue: shouldContinue)
? shouldContinue
是否不是doSomeWork1()范围内的指针? 最佳答案
成为指针只是inout参数优化过程的副作用。实际上,它们使用复制入复制行为以不同的方式工作。因此,在函数内部,该参数就像常规变量一样对待,而不是指针。如果将其传递给采用inout参数的另一个函数,则必须将其标记为此类。
In-Out Parameters
关于swift - swift inout参数是变量还是指针?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40567728/