在Objective-C中,我通常会使用这样的东西:
static NSString *kViewTransformChanged = @"view transform changed";
// or
static const void *kViewTransformChanged = &kViewTransformChanged;
[clearContentView addObserver:self
forKeyPath:@"transform"
options:NSKeyValueObservingOptionNew
context:&kViewTransformChanged];
Run Code Online (Sandbox Code Playgroud)
我有两个重载方法可供选择,为KVO添加一个观察者,唯一的区别是context参数:
clearContentView.addObserver(observer: NSObject?, forKeyPath: String?, options: NSKeyValueObservingOptions, context: CMutableVoidPointer)
clearContentView.addObserver(observer: NSObject?, forKeyPath: String?, options: NSKeyValueObservingOptions, kvoContext: KVOContext)
Run Code Online (Sandbox Code Playgroud)
由于Swift不使用指针,我不确定如何取消引用指针以使用第一种方法.
如果我创建自己的KVOContext常量以便与第二种方法一起使用,我最终会问它:
let test:KVOContext = KVOContext.fromVoidContext(context: CMutableVoidPointer)
Run Code Online (Sandbox Code Playgroud)
编辑:CMutableVoidPointer和KVOContext有什么区别?有人可以给我一个例子,说明如何使用它们以及何时使用它们?
编辑#2:苹果公司的开发人员刚刚将这个发布到了论坛:KVOContext正在消失; 使用全局引用作为您的上下文是现在的方法.