gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-11-01 05:49:04 24 4
gpt4 key购买 nike

这只是 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()

最佳答案

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

func printMyPointer() {
printPointer([self])
}

但更简单的是,使用 unsafeAddressOf():

func printMyPointer() {
print(unsafeAddressOf(self))
}

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

    print(Unmanaged.passUnretained(self).toOpaque())

    print(unsafeBitCast(self, to: UnsafeRawPointer.self))

关于swift - 在 swift 中打印 &self,不能分配给类型的不可变值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31144748/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com