我们假设我们覆盖了scrollViewDidScroll
方法,而对于第一次只滚动 ,我们希望doSomething()
实现这一点的一个简单方法是使用实例级布尔变量并切换/检查它。
func scrollViewDidScroll(scrollView: UIScrollView!) {
if(!scrolled) {
scrolled = true;
doSomething();
}
}
我想要一个更好的解决方案,它不会引入布尔变量scrolled
。类似于dispatch_once
的东西,但是对象的生命周期而不是整个过程。
这个模式有名字吗?
答案 0 :(得分:5)
类似于dispatch_once的东西,但是对象的生命周期而不是整个过程
不幸的是,dispatch_once
在实例级别上并不安全。在Objective-C中使用它的人这样做是错误的。这就是为什么dispatch_once
在Swift中不可用。
您的if !scrolled
模式实际上是正确的实现(除了您使用括号,分号和其他非Swifty内容)。它被称为标志。
答案 1 :(得分:2)
由于您希望仅在类的每个实例中完成一次,因此使用实例变量是正确的解决方案。而且,正如你所说,这是一个微不足道的方法。
如果它是正确和微不足道的,为什么你认为有更好的方法?