2016-07-01 11 views
7

Ich versuche einen CocoaPod für Swift 3 zu erstellen. Da CocoaPods und Quick verwendet und diese Bibliotheken noch nicht aktualisiert wurden, habe ich die Repos gegabelt und versuche, sie zu konvertieren.War SetTimer in Swift 3 veraltet?

Im Nimble Projekt gibt es eine Funktion mit der Unterschrift genannt:

setTimer(start: DispatchTime, interval: UInt64, leeway: UInt64) 

Der Compiler sagt Cannot invoke 'setTimer' with an argument list of type '(start: DispatchTime, interval: UInt64, leeway: UInt64)'

private let pollLeeway: UInt64 = NSEC_PER_MSEC 
let interval = UInt64(pollInterval * Double(NSEC_PER_SEC)) 
asyncSource.setTimer(start: DispatchTime.now(), interval: interval, leeway: pollLeeway) 

Die Auto-Vervollständigung zeigt alle setTimer Methoden sind veraltet, aber aus was ich found sie sollten nicht sein.

Gibt es einen Ersatz?

Antwort

0

In Xcode 8 Beta 1 ist die Signatur dieser Methode ist:

public func setTimer(start: DispatchTime, 
        interval: DispatchTimeInterval, 
        leeway: DispatchTimeInterval = default) 

Wenn Sie in den richtigen DispatchTime und DispatchTimeInterval Parameter Plug wird es kompilieren und Sie werden eine deprecation Warnung sehen:

'setTimer(start:leeway:)' is deprecated: replaced by 
instance method 'DispatchSourceTimer.scheduleOneshot(deadline:leeway:)' 

Wie immer, Befehl + Klick auf diese Swift Klassen und Methoden werden Sie in die Swift Interface Quellen, wo diese Methoden deklariert werden.

7

In Swift 3.0 sollten Sie

let timer = DispatchSource.makeTimerSource(flags: DispatchSource.TimerFlags(rawValue: UInt(0)), queue: DispatchQueue.global(qos: DispatchQoS.QoSClass.default)) 
    timer.scheduleRepeating(deadline: DispatchTime.init(uptimeNanoseconds: UInt64(100000)), interval: DispatchTimeInterval.seconds(1), leeway: DispatchTimeInterval.seconds(0)) 

verwenden, um statt, und es ist für mich arbeiten