在swift中打印&self,不能分配给类型的不可变值

Wil*_* M. 1 swift

这只是swift中指针的一个练习,但是我试图编写一个函数来打印指向self的指针,但我不断收到错误"无法分配给C类的不可变值".这是Swift中甚至可能实现的吗?

class C {
    static var c = C()
    var a = 1
    func printMyPointer() {
        printPointer(&self) //cannot assign to immutable value of type C
    }

    func printPointer(ptr:UnsafePointer<C>) {
        print(ptr)
    }
}

C.c.printMyPointer()
Run Code Online (Sandbox Code Playgroud)

Mar*_*n R 7

正如在另一个答案中已经解释的那样,您不能传递常量作为输入输出参数的参数.作为一种变通方法,您可以传递一个数组,因为这实际上会传递第一个元素的地址:

func printMyPointer() {
    printPointer([self])
}
Run Code Online (Sandbox Code Playgroud)

但更简单,使用unsafeAddressOf():

func printMyPointer() {
    print(unsafeAddressOf(self))
}
Run Code Online (Sandbox Code Playgroud)

Swift 3的更新:从Xcode 8 beta 6开始,unsafeAddressOf 不再存在.您可以转换self为指针:

    print(Unmanaged.passUnretained(self).toOpaque())
Run Code Online (Sandbox Code Playgroud)

要么

    print(unsafeBitCast(self, to: UnsafeRawPointer.self))
Run Code Online (Sandbox Code Playgroud)