如何在 swift 4 中使用 UnsafeMutablePointer

Der*_*328 8 swift unsafemutablepointer swift4

Objective-c 有一个指向指针的指针的概念。如果取消引用第一个指针,则可以访问原始指针

void makeFive(int *n) {
    *n = 5;
}

int n = 0;
makeFive(&n);
// n is now 5
Run Code Online (Sandbox Code Playgroud)

当它被桥接到 Swift 3 时,它变成了一个 UnsafeMutablePointer

func makeFive(_ n: UnsafeMutablePointer<Int>) {
    n.memory = 5
}
var n: Int = 0
makeFive(&n)
// n is now 5
Run Code Online (Sandbox Code Playgroud)

但是,从 Swift 4 开始,这种行为发生了变化,并且 memory 属性不再可用。

与 makeFive(_:) 函数等效的 swift 4 是什么?

更新 感谢 Hamish,我现在知道“记忆”已重命名为指针。

Vin*_*App 6

请检查:https : //developer.apple.com/documentation/swift/unsafemutablepointer

func makeFive(_ n: UnsafeMutablePointer<Int>) {
    n.initialize(to: 5)
}
var n: Int = 0
makeFive(&n)
// n is now 5
Run Code Online (Sandbox Code Playgroud)

  • 小心这一点;指针 * 已经 * 初始化,所以你不应该真正调用它的 `initialize(to:)`。它会*发生*在这种情况下工作,因为`Pointee`是一个平凡的类型(`Int`),但会为非平凡的指针类型产生未定义的行为(我认为至少;尽管最好的情况仍然泄漏记忆)。你在这里想要的操作是*赋值*给指针;这是通过设置指针的`pointee` 属性来完成的。 (7认同)