Swift - 指向指针的指针

时间:2016-06-25 21:12:41

标签: 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 new instance of objA, but bar
                 //is still a reference to the old instance

我希望bar成为foo变量的引用,而不是foo对象的引用。这样,如果foo成为对其他对象的引用,则bar会继续进行此操作。

3 个答案:

答案 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)

我真的不知道为什么你会这么想。