[英]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.