gpt4 book ai didi

swift - UnsafeMutablePointer 到具体对象类型

转载 作者:搜寻专家 更新时间:2023-10-30 22:06:02 25 4
gpt4 key购买 nike

如何从 UnsafeMutablePointer<Void> 转换到具体对象类型

我已经创建了一个 KVO 观察器并传递了一个自定义类作为上下文,就像这样

class Info : NSObject
{
}

class Foo : NSObject {
dynamic var property = ""
}


var info = Info()

class Observing : NSObject {
func observe1(object: NSObject) {

object.addObserver(self, forKeyPath: "property", options: .New, context: &info)
}

override func observeValueForKeyPath(keyPath: String, ofObject object: AnyObject, change: [NSObject : AnyObject], context: UnsafeMutablePointer<Void>) {

println("observed \(keyPath) change:'\(change)' context: \(context)")
}
}

let o = Observing()
var object = Foo()
o.observe1(object)
object.property = "new value"

我想知道如何将上下文转换回 Info 类

最佳答案

UnsafeMutablePointer 有一个初始化器,它接受另一个类型的另一个 UnsafeMutablePointer,结果是相同的指针,但指向新类型。

所以在你的情况下:

let infoPtr = UnsafeMutablePointer<Info>(context)
let info = infoPtr.memory

请注意,正如文档所描述的那样,这是“根本不安全的转换”。如果您拥有的指针不是指向您将其转换成的类型的指针,或者如果您现在访问它的内存在此上下文中无效,则您最终可能会访问无效内存和您的程序会有点崩溃。

关于swift - UnsafeMutablePointer<Void> 到具体对象类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29492817/

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