这只是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)
正如在另一个答案中已经解释的那样,您不能传递常量作为输入输出参数的参数.作为一种变通方法,您可以传递一个数组,因为这实际上会传递第一个元素的地址:
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)
| 归档时间: |
|
| 查看次数: |
1894 次 |
| 最近记录: |