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
请注意,正如文档所描述的那样,这是一种“根本不安全的转换”。如果您拥有的指针不是指向您将其转换为的类型的指针,或者如果您现在正在访问的内存在此上下文中无效,那么您可能会访问无效内存,并且您的程序将有点崩溃