我在以下代码中使用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/

10-09 18:31