2016-09-27 1 views
0

Veuillez noter que je n'ai pas créé cette fonction, elle fait partie d'une bibliothèque qui n'a pas été mise à jour par son créateur. Quelqu'un pourrait-il donner des conseils sur la façon de passer la fonction à 3.0 rapide?Reformatage de la fonction vers la syntaxe swift 3.0

func debounce(delay:TimeInterval, queue:DispatchQueue, action: @escaping (()->())) ->()->() { 
     lastFireTime = dispatch_time(DISPATCH_TIME_NOW,0) 
     dispatch_after(dispatch_time(DISPATCH_TIME_NOW,dispatchDelay),queue) { 
     let now = dispatch_time(DISPATCH_TIME_NOW,0) 
     let when = dispatch_time(lastFireTime, dispatchDelay) 
     if now >= when { 
     action() 
     } 
     } 

    } 
} 
+0

Supprimer le type d'objet de la méthode, si cela fonctionne. Voir http://stackoverflow.com/a/39526497/3463712 – Max

Répondre

0

API C

dispatch_time_t 
    dispatch_time(dispatch_time_t base, int64_t offset); 

void 
    dispatch_after(dispatch_time_t when, dispatch_queue_t queue, 
     void (^block)(void)); 

à Swift, la même fonctionnalité est disponible via le cadre Dispatch (importation d'expédition), ce qui est agréable cadre orienté objet construit sur le dessus de l'API C. Essayez le prochain extrait dans Playground et vérifiez le prochain Apple actuel documentation pour plus de détails.

import PlaygroundSupport 
PlaygroundPage.current.needsIndefiniteExecution = true 

import Foundation 
import Dispatch 

let queue = DispatchQueue(label: "my queue") 

// call the block asynchronously after some time 
print(1, "now is", Date()) 

queue.asyncAfter(deadline: .now() + .seconds(5)) { 
    print() 
    print(3, "now is", Date()) 
    PlaygroundPage.current.finishExecution() 
} 

print(2, "now is", Date()) 

Bon point de départ pour les débutants est here

Je vous suggère de lire A quick look at Grand Central Dispatch and Swift 3 avec beaucoup d'informations sous la forme très comprimée.