web-dev-qa-db-ja.com

迅速な機能の遅延

サンプルコードなど何も持っていません、どうすればよいかわかりませんが、Swiftで関数を一定時間遅らせる方法を教えてください。

110
CoolMAn

GCDを使用できます(この例では10秒の遅延があります)。

スイフト2

let triggerTime = (Int64(NSEC_PER_SEC) * 10)
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, triggerTime), dispatch_get_main_queue(), { () -> Void in
    self.functionToCall()
})

スイフト3とスイフト4

DispatchQueue.main.asyncAfter(deadline: .now() + 10.0, execute: {
    self.functionToCall()
})
311
Farlei Heinen

Swift 10秒遅れのバージョン

unowned let unownedSelf = self

let deadlineTime = DispatchTime.now() + .seconds(10)
DispatchQueue.main.asyncAfter(deadline: deadlineTime, execute: { 
     unownedSelf.functionToCall()
})
28
Anand
 NSTimer.scheduledTimerWithTimeInterval(NSTimeInterval(3), target: self, selector: "functionHere", userInfo: nil, repeats: false)

これは3秒の遅れでfunctionHere()関数を呼び出すでしょう

23
JChomali

遅延機能に引数を追加します。

まず辞書を設定し、それをuserInfoとして追加します。引数としてタイマーを使用して情報を展開します。

let arg : Int = 42
let infoDict : [String : AnyObject] = ["argumentInt", arg]

NSTimer.scheduledTimerWithTimeInterval(NSTimeInterval(3), target: self, selector: "functionHereWithArgument:", userInfo: infoDict, repeats: false)

それから呼び出された関数で

func functionHereWithArgument (timer : NSTimer)
{
    if let userInfo = timer.userInfo as? Dictionary<String, AnyObject>
    {
         let argumentInt : Int = (userInfo[argumentInt] as! Int)
    }
}
3
KorinW