我试图找出如何在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
会继续进行此操作。
答案 0 :(得分:3)
对变量进行二次引用的一种方法是计算变量:
1& childRecordFromChildIndex, EffectiveValueEntry& entry, ValueLookupType& sourceType, FrameworkElementFactory templateRoot)
at System.Windows.StyleHelper.GetValueFromTemplatedParent(DependencyObject container, Int32 childIndex, FrameworkObject child, DependencyProperty dp, FrugalStructList
答案 1 :(得分:1)
您可以尝试使用UnsafeMutablePointer
。请参阅以下示例:
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"
但它闻起来有点味道,最好避免使用这样的技术。
答案 2 :(得分:1)
我相信这就是你想要的:
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
(将pointee
替换为memory
for Swift&lt; 3.0)
我真的不知道为什么你会这么想。