Une idée plus claire de la structure :
dispatch_after(when: dispatch_time_t, queue: dispatch_queue_t, block: dispatch_block_t?)
dispatch_time_t
est un UInt64
. Le site dispatch_queue_t
est en fait un type aliasé à un NSObject
mais vous devriez simplement utiliser vos méthodes GCD habituelles pour obtenir des files d'attente. Le bloc est une fermeture Swift. Plus précisément, dispatch_block_t
est défini comme suit () -> Void
ce qui est équivalent à () -> ()
.
Exemple d'utilisation :
let delayTime = dispatch_time(DISPATCH_TIME_NOW, Int64(1 * Double(NSEC_PER_SEC)))
dispatch_after(delayTime, dispatch_get_main_queue()) {
print("test")
}
EDITAR:
Je recommande d'utiliser @matt est vraiment sympa delay
fonction .
EDIT 2 :
Dans Swift 3, il y aura de nouveaux wrappers pour GCD. Voir ici : https://github.com/apple/swift-evolution/blob/master/proposals/0088-libdispatch-for-swift3.md
L'exemple original serait écrit comme suit dans Swift 3 :
let deadlineTime = DispatchTime.now() + .seconds(1)
DispatchQueue.main.asyncAfter(deadline: deadlineTime) {
print("test")
}
Notez que vous pouvez écrire le deadlineTime
déclaration comme DispatchTime.now() + 1.0
et obtenir le même résultat car le +
est surchargé comme suit (de la même manière pour -
) :
func +(time: DispatchTime, seconds: Double) -> DispatchTime
func +(time: DispatchWalltime, interval: DispatchTimeInterval) -> DispatchWalltime
Cela signifie que si vous n'utilisez pas l'option DispatchTimeInterval
enum
et que vous écrivez simplement un nombre, il est supposé que vous utilisez les secondes.
1 votes
Apple a dépublié ce livre en 2018. Les dernières archives que j'ai pu trouver datent de décembre 2017. . Les anciens liens vers l'iBook redirigent maintenant simplement vers developer.apple.com/documentation/swift .