Ios 在Swift中编写Kvo上下文

Ios 在Swift中编写Kvo上下文,ios,objective-c,swift,key-value-observing,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]; contentOffset是UIScrollView属性 我已将其写入swift as- Swift var kKVO

在ObjC中

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

我已将其写入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编写
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

你可以使用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

这个目标C代码不好;上下文与被初始化一起使用。在Swift中,它将被初始化为0。无论如何,上下文是供您使用的。它是一个任意值,允许您指定观察此值的原因或对象和键路径之外的对象的对象。它基本上是一个用户cookie。这就是为什么这个代码不会崩溃;操作系统不使用上下文,您使用。在Swift中,您可以将引用传递给任何引用类型,也可以忽略该参数;如果不使用它,则默认为零:
self.superview?.removeObserver(self.parent!,forKeyPath:“contentOffset”)
此目标C代码不正确;上下文与被初始化一起使用。在Swift中,它将被初始化为0。无论如何,上下文是供您使用的。它是一个任意值,允许您指定观察此值的原因或对象和键路径之外的对象的对象。它基本上是一个用户cookie。这就是为什么这个代码不会崩溃;操作系统不使用上下文,您使用。在Swift中,您可以将引用传递给任何引用类型,也可以忽略该参数;如果您不使用它,它默认为零:
self.superview?.removeObserver(self.parent!,forKeyPath:“contentOffset”)

使用
didSet
怎么样?我不知道如何实现,您可以添加作为答案吗?即使您有scrollview委托方法,您在scrollview中添加KVO的目的是什么,如果您不知道委托方法,只需通过谷歌搜索它如何设置UIScrollView的委托使用
didSet
怎么样?我不知道如何实现,您可以添加作为答案吗?即使您有scrollview委托方法,您在scrollview中添加KVO的目的是什么,如果您不知道委托方法,只需谷歌一下如何设置UIScrollViewDelegate为什么Objective-C代码不好
kKVOContext
包含自身的地址。为什么Objective-C代码不好
kKVOContext
包含其自身的地址。