ios - 在 Swift 中编写 Kvo 上下文

标签 ios objective-c swift key-value-observing

ObjC

static void * const kKVOContext = (void*)&kKVOContext;
[self.superview removeObserver:self.parent forKeyPath:NSStringFromSelector(@selector(contentOffset)) context:kKVOContext];

contentOffsetUIScrollView 属性。

我已经把它写成 swift as-

swift

 var kKVOContext = UnsafeMutableRawPointer.allocate(bytes: 4 * 4, alignedTo: 1)
 self.superview?.removeObserver(self.parent!, forKeyPath: NSStringFromSelector(#selector(getter: UIScrollView.contentOffset)), context: &kKVOContext)

所以在 Swift 中 这是正确的方法还是应该是不同的 UnsafeMutableRawPointer?或如何快速编写 kKVOContext

最佳答案

你可以使用 swift 4 的新特性

// Setting up KVO
 observation = scrollView.observe(\.contentOffset, changeHandler: { (object, change) in
       print("Updated Value: \(object.contentOffset)")
 })

 // Deiniting or invalidating the observation token ends the observation
 observation.invalidate()

 // After invalidating KVO doesn't trigger anymore

关于ios - 在 Swift 中编写 Kvo 上下文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47504193/

相关文章:

xcode - 运行 Xcode 6.4 应用程序时出现 fatal error

ios - 在 ios 中获取当前的自动对焦系统时崩溃

ios - 在 iOS 7 中更改后退按钮会禁用滑动以返回导航

ios - 删除 UIBezierPath 上的多余空间

iOS:容器 View Controller 模式

iphone - 标签未显示在 tableView 单元格上

ios - 为什么我的 UITableViews 在以编程方式添加时在 y 轴上放错了位置?

iOS/objective-c(++) 等同于 Windows I/O 完成端口?

ios - 我的 IOS 应用程序已被拒绝 - 数据存储指南 (2.23) 我有 2 个可能的嫌疑人

Swift-变量在使用前未初始化(但未使用)