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