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

前端之家收集整理的这篇文章主要介绍了使用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)
    }
}
原文链接:https://www.f2er.com/swift/320549.html

猜你在找的Swift相关文章