Swift 非女性化指针<;无效>;到具体的对象类型

Swift 非女性化指针<;无效>;到具体的对象类型,swift,casting,Swift,Casting,如何从unsafemeutablepointer转换为具体的对象类型 我创建了一个KVO观察器,并将一个自定义类作为上下文传递,如下所示 class Info : NSObject { } class Foo : NSObject { dynamic var property = "" } var info = Info() class Observing : NSObject { func observe1(object: NSObject) { ob

如何从
unsafemeutablepointer
转换为具体的对象类型

我创建了一个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"
类信息:NSObject
{
}
类Foo:NSObject{
动态变量属性=“”
}
var info=info()
类:NSObject{
func observe1(对象:NSObject){
addObserver(self,forKeyPath:“属性”,选项:。新建,上下文:&信息)
}
重写func observeValueForKeyPath(键路径:字符串,对象对象:AnyObject,更改:[NSObject:AnyObject],上下文:UnsafeMutablePointer){
println(“观察到的\(键路径)更改:'\(更改)'上下文:\(上下文)”)
}
}
设o=观察()
var object=Foo()
o、 观察者1(对象)
object.property=“新值”

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

UnsafeMutablePointer
有一个初始值设定项,它接受另一种类型的另一个
UnsafeMutablePointer
,结果是相同的指针,但指向新类型

因此,在你的情况下:

let infoPtr = UnsafeMutablePointer<Info>(context)
let info = infoPtr.memory
let infoPtr=unsafemeutablepointer(上下文)
let info=infoPtr.memory
请注意,正如文档所描述的那样,这是一种“根本不安全的转换”。如果您拥有的指针不是指向您将其转换为的类型的指针,或者如果您现在正在访问的内存在此上下文中无效,那么您可能会访问无效内存,并且您的程序将有点崩溃