使用Swift为KVO添加观察者,无需指针
发布时间:2020-12-14 05:54:55 所属栏目:百科 来源:网络整理
导读:在Objective-C中,我通常会使用这样的东西: static NSString *kViewTransformChanged = @"view transform changed";// orstatic const void *kViewTransformChanged = kViewTransformChanged;[clearContentView addObserver:self forKeyPath:@"transform" o
在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) } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |