使用Swift为KVO添加观察者,无需指针

在Objective-C中,我通常会使用这样的东西:
static Nsstring *kViewTransformChanged = @"view transform changed";
// or
static const void *kViewTransformChanged = &kViewTransformChanged;

[clearContentView addobserver:self
                       forKeyPath:@"transform"
                          options:NSkeyvalueObservingOptionNew
                          context:&kViewTransformChanged];

我有两个重载方法可供选择,为KVO添加观察者,唯一的区别就是上下文参数:

clearContentView.addobserver(observer: NSObject?,forKeyPath: String?,options: NSkeyvalueObservingOptions,context: CMutableVoidPointer)
 clearContentView.addobserver(observer: NSObject?,kvoContext: KVOContext)

使用Swift不使用指针,我不知道如何取消引用使用第一种方法的指针。

如果我创建自己的KVOContext常数与第二种方法一起使用,我结束了它要求:

let test:KVOContext = KVOContext.fromVoidContext(context: CMutableVoidPointer)

编辑:CMutableVoidPointer和KVOContext有什么区别?有人可以给我一个例子,如何使用它们,当我使用一个在另一个

编辑#2:苹果公司的开发者刚刚发布到论坛:KVOContext正在消失;使用全局参考作为您的上下文是现在的方式。

现在KVOContext已经在Xcode 6 beta 3中,您可以执行以下操作。定义全局(即不是类属性),如下所示:
let myContext = UnsafePointer<()>()

添加观察者:

observee.addobserver(observer,forKeyPath: …,options: nil,context: myContext)

观察员:

override func observeValueForKeyPath(keyPath: String!,ofObject object: AnyObject!,change: [NSObject : AnyObject]!,context: UnsafePointer<()>) {
    if context == myContext {
        …
    } else {
        super.observeValueForKeyPath(keyPath,ofObject: object,change: change,context: context)
    }
}

相关文章

软件简介:蓝湖辅助工具,减少移动端开发中控件属性的复制和粘...
现实生活中,我们听到的声音都是时间连续的,我们称为这种信...
前言最近在B站上看到一个漂亮的仙女姐姐跳舞视频,循环看了亿...
【Android App】实战项目之仿抖音的短视频分享App(附源码和...
前言这一篇博客应该是我花时间最多的一次了,从2022年1月底至...
因为我既对接过session、cookie,也对接过JWT,今年因为工作...