【问题标题】:Pointer to pointer parameter in Swift function指向 Swift 函数中的指针参数的指针
【发布时间】:2014-09-10 12:02:47
【问题描述】:

在 Swift 中你如何处理指针的指针?在 Objective-C 中,我有一个函数可以递归调用,这样我就可以跟踪递归的数量,但我对如何在 Swift 中实现这一点感到困惑。

NSNumber *recursionCount = [NSNumber numberWithInteger:-1];
[self doRecursion:&recursionCount];

- (void)doRecursion:(NSNumber **)recursionCount {
    // I'm sure this is a terrible way to increment, but I have limited Objective-C experience
    // and this worked, so I moved on after failing to find a decent var++ equivalent :-(
    int addThis = (int)i + 1;
    *recursionCount = [NSNumber numberWithInt:[*recursionCount intValue] + addThis];
    [self doRecursion:recursionCount];
}

在为这篇文章缩减示例的过程中,我最终创建了一个永无止境的循环,但你知道我是如何记住每次递归的值的。

有人知道如何在 Swift 中做到这一点吗?谢谢。

【问题讨论】:

    标签: objective-c pointers recursion swift


    【解决方案1】:

    强烈建议不要在 swift 中使用指针。

    要更改作为参数传递给函数的变量,您必须使用inout 修饰符通过引用传递它(类似于传递它的指针)。我已将您的函数的逻辑更改为在 10 次迭代后停止:

    func doRecursion(inout recursionCount: Int) -> Int {
        if (recursionCount < 10) {
            ++recursionCount
             doRecursion(&recursionCount)
        }
    
        return recursionCount
    }
    

    然后你可以调用:

    var counter: Int = -1
    let x = doRecursion(&counter) // Prints 10 in playground
    

    推荐阅读:In-Out Parameters

    【讨论】:

    • 谢谢。我一定错过或略读了有关 inout 参数的部分。我什至尝试过 AutoreleasingUnsafeMutablePointer 和 UnsafeMutablePointer,但这让我走上了悲伤的道路 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多