在 ObjC
中static void * const kKVOContext = (void*)&kKVOContext;
[self.superview removeObserver:self.parent forKeyPath:NSStringFromSelector(@selector(contentOffset)) context:kKVOContext];
contentOffset
是UIScrollView
属性。
我把它写成swift as -
夫特
var kKVOContext = UnsafeMutableRawPointer.allocate(bytes: 4 * 4, alignedTo: 1)
self.superview?.removeObserver(self.parent!, forKeyPath: NSStringFromSelector(#selector(getter: UIScrollView.contentOffset)), context: &kKVOContext)
所以在斯威夫特
这是正确的方式还是应该是不同的UnsafeMutableRawPointer
?或者我如何在swift中写kKVOContext
?
答案 0 :(得分:1)
这个Objective C代码很糟糕;上下文用于初始化。在Swift中,它将被初始化为0.无论如何,上下文供您使用。它是一个任意值,允许您指定除了对象和键路径之外您正在观察此值或者正在查看此值的人。它基本上是一个用户cookie。这就是为什么这段代码没有崩溃;操作系统不使用上下文,你这样做。在Swift中,您可以将引用传递给任何引用类型,或者您实际上可以省略该参数;如果您不使用它,则默认为nil:self.superview?.removeObserver(self.parent!, forKeyPath: "contentOffset")