在Swift中编写Kvo上下文

问题描述 投票:0回答:2

在ObjC

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

contentOffsetUIScrollView的财产。

我把它写成了迅速的 -

迅速

 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?

ios objective-c swift key-value-observing
2个回答
1
投票

你可以使用swift 4的新功能

UnsafeMutableRawPointer

1
投票

这个Objective C代码很糟糕;上下文用于初始化。在Swift中,它将被初始化为0.无论如何,上下文供您使用。它是一个任意值,允许您指定除了对象和键路径之外您正在观察此值或者正在查看此值的人。它基本上是一个用户cookie。这就是为什么这段代码没有崩溃;操作系统不使用上下文,你这样做。在Swift中,您可以将引用传递给任何引用类型,或者您实际上可以省略该参数;如果你不使用它,它默认为nil:kKVOContext

© www.soinside.com 2019 - 2024. All rights reserved.