仅在Swift中对象的生命周期中调用一次方法

时间:2016-08-19 21:36:48

标签: ios swift cocoa-touch

我们假设我们覆盖了scrollViewDidScroll方法,而对于第一次只滚动 ,我们希望doSomething()

实现这一点的一个简单方法是使用实​​例级布尔变量并切换/检查它。

func scrollViewDidScroll(scrollView: UIScrollView!) {
  if(!scrolled) {
   scrolled = true; 
   doSomething(); 
  }
}

我想要一个更好的解决方案,它不会引入布尔变量scrolled。类似于dispatch_once的东西,但是对象的生命周期而不是整个过程。

这个模式有名字吗?

2 个答案:

答案 0 :(得分:5)

  

类似于dispatch_once的东西,但是对象的生命周期而不是整个过程

不幸的是,dispatch_once在实例级别上并不安全。在Objective-C中使用它的人这样做是错误的。这就是为什么dispatch_once在Swift中不可用。

您的if !scrolled模式实际上是正确的实现(除了您使用括号,分号和其他非Swifty内容)。它被称为标志

答案 1 :(得分:2)

由于您希望仅在类的每个实例中完成一次,因此使用实例变量是正确的解决方案。而且,正如你所说,这是一个微不足道的方法。

如果它是正确和微不足道的,为什么你认为有更好的方法?