簡體   English   中英

僅在Swift中對象的生命周期中調用一次方法

[英]Call a method once only for the lifetime of the object in Swift

假設我們覆蓋scrollViewDidScroll方法,並且對於第一次只有滾動,我們想要doSomething()

一個簡單的方法是實現這是一個實例級布爾變量並切換/檢查它。

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

我想要一個更好的解決方案,不會引入scrolled的布爾變量。 類似於dispatch_once東西,但是對象的生命周期而不是整個過程。

這個模式有名字嗎?

類似於dispatch_once的東西,但是對象的生命周期而不是整個過程

不幸的是, dispatch_once在實例級別上並不安全。 在Objective-C中使用它的人這樣做是錯誤的。 這就是為什么dispatch_once在Swift中不可用的原因。

你的if !scrolled模式實際上是正確的實現(除了你使用括號,分號和其他非Swifty的東西)。 它被稱為旗幟

由於您希望每個類的實例只執行一次,因此使用實例變量是正確的解決方案。 而且,正如你所說,這是一個微不足道的方法。

如果它是正確和微不足道的,為什么你認為有更好的方法?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM