Swift-指向指针的指针

Swift-指向指针的指针,swift,Swift,我想知道如何在Swift中创建指向指针的指针。现在,我知道我们在Swift中没有确切的指针,但以下是我试图实现的目标: var foo = objA() //foo is variable referencing an instance of objA var bar = foo //bar is a second variable referencing the instance above foo = objA() //foo is now a reference to a

我想知道如何在Swift中创建指向指针的指针。现在,我知道我们在Swift中没有确切的指针,但以下是我试图实现的目标:

var foo = objA() //foo is variable referencing an instance of objA
var bar = foo    //bar is a second variable referencing the instance above

foo = objA()     //foo is now a reference to a new instance of objA, but bar
                 //is still a reference to the old instance

我希望
bar
是对
foo
变量的引用,而不是对
foo
对象的引用。这样,如果
foo
成为对另一个对象的引用,
bar
将继续运行。

您可以尝试使用
不可靠指针。请参见下面的示例:

let string = UnsafeMutablePointer<String>.alloc(1)
string.initialize("Hello Swift")

print(string.memory)

let next = string
next.memory = "Bye Bye Swift"

print(string.memory) // prints "Bye Bye Swift"
let string=unsafemeutablepointer.alloc(1)
初始化(“Hello Swift”)
打印(字符串.内存)
让下一个=字符串
next.memory=“再见,斯威夫特”
print(string.memory)//打印“Bye-Bye-Swift”

但是它有点异味,最好避免使用这种技术。

对变量进行二次引用的一种方法是使用计算的变量:

class C {}

var a = C()
var b: C { return a }  // b is a computed variable, returning the current value of a

b === a  // true
a = C()
b === a  // true, whereas "var b = a" would have made this false

我相信这就是你想要的:

class O {
    let n: Int
    init(n: Int) { self.n = n }
}

var foo = O(n: 1)
var bar = withUnsafePointer(&foo) {$0}
print(bar.pointee.n) // Prints 1

foo = O(n: 2)
print(bar.pointee.n) // Prints 2
(对于Swift<3.0,将
指针对象
替换为
内存


我真的不知道你为什么想要那样做。

你为什么需要指针?这是一个问题的解决方案,我很可能会用另一种方法来解决,但我真的很好奇如何才能做到。问我们这个实际问题怎么样?也许我们可以帮你想出一个好方法来解决这个问题。谢谢你的意见,但我知道解决这个问题的其他方法,我只是对如何用这种特殊的方法来解决这个问题感兴趣。比我的答案好得多,我甚至没有考虑计算属性+1这是非常不安全的,因为它允许通过
bar
引用对象,即使对象已解除分配。传递给withUnsafePointer的闭包的指针不应在该闭包的上下文之外使用。