2017-03-24 8 views
0

swift 3.0で何らかの遅延(0.2 ms)を使用してメソッドを呼び出そうとしていますが、最初に遅延を伴うメソッドを呼び出すと、同じメソッドが再度呼び出されますすでに0.2秒以内に呼び出された場合は前回の呼び出しをキャンセルする必要があります。私は客観的なCがperformSelectorとcancelPreviousPerformRequestWithTargetを持っているのを見ることができましたが、私はSwift 3.0のための同じ例を見つけることができません、いずれかが助けてください。Swift3 performSelectorとcancelPreviousPerformRequestWithTargetのバージョン

+1

Grand Central Dispatch(GCD)をご覧ください。それはあなたが必要とするすべてを提供します。 – vadian

+0

または、タイマーを使用して、前のタイマーを常に無効にします。 – Sulthan

答えて

2

これらのメソッドを取得するには、クラスをNSObjectのサブクラスにする必要があります。

class MyClass: NSObject { 

    func performAction(afterDelay delay: TimeInterval) { 
     perform(#selector(MyClass.action), with: self, afterDelay: delay) 
    } 

    func action(sender: Any?) { 
     print("action called") 
    } 

    func cancel() { 
     NSObject.cancelPreviousPerformRequests(withTarget: self, selector: #selector(MyClass.action), object: self) 
    } 
} 

しかし、いくつかのアクションを実行する必要がある場合は、GCDメソッドを確認することができます。

DispatchQueue.main.asyncAfter(deadline: .now() + 0.2) { 
      //you action 
     } 
+0

あなたはswift 3でperformとcancelPreviousPerformRequestsの実例を持っていますか? – Max

+0

私は既に例を追加しました。それのどの部分があなたには分かりませんか? –

+0

Worksパーフェクト!!! – Max