2016-07-01 14 views
7

Sto cercando di creare un CocoaPod per Swift 3. Perché CocoaPods utilizza Nimble e Quick e quelle librerie non sono ancora state aggiornate, ho biforcato i repository e sto provando a convertirli.SetTimer è stato deprecato in Swift 3?

Nel progetto Agile c'è una funzione chiamata con la firma di:

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

Il compilatore dice 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) 

Gli spettacoli completamento automatico tutti i metodi SetTimer sono deprecati, ma da quello che io found non dovrebbero essere.

C'è una sostituzione?

risposta

0

In Xcode 8 Beta 1, la firma di tale metodo è:

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

Se si collega il corretto DispatchTime e DispatchTimeInterval parametri che verrà compilato e vedrete un avvertimento deprecazione:

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

Come sempre, il comando + clic su queste classi e metodi Swift ti porterà nelle fonti dell'interfaccia Swift dove questi metodi sono dichiarati.

7

In Swift 3.0 si deve usare

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)) 

a posto, ed è il lavoro per me