Swift-指向指针的指针
我想知道如何在Swift中创建指向指针的指针。现在,我知道我们在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
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的闭包的指针不应在该闭包的上下文之外使用。