UnsafeMutablePointer<Void> 到具体对象类型

UnsafeMutablePointer<Void> to Concrete Object Type

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

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

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 class

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

所以在你的情况下:

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

请注意,正如文档所描述的那样,"a fundamentally unsafe conversion"。如果您拥有的指针 不是 指向您将其转换为的类型的指针,或者如果您现在访问的内存在此上下文中无效,则您最终可能会访问无效内存你的程序会有点崩溃。