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

假设我们重写scrollViewDidScroll方法,并且只有第一次滚动,我们想doSomething()

一个微不足道的方法是实现这个是具有一个实例级布尔variables和切换/检查它。

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

我想要一个更好的解决scheme,不会引入scrolled的布尔variables。 与dispatch_once类似,但是在对象的整个生命周期中,而不是整个过程。

这个模式有没有名字?

与dispatch_once类似,但是在对象的整个生命周期中,而不是整个过程

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

您的if !scrolled模式实际上是正确的实现(除了使用括号,分号和其他非Swifty的东西)。 这就是所谓的国旗

既然你只需要为每个类的实例完成一次,那么使用一个实例variables就是正确的解决scheme。 而且,正如你所说,这是一个微不足道的方法。

如果这是正确和微不足道的,为什么你认为有一个更好的办法?