scheduledtimer example create ios swift timer nstimer swift3

ios - example - No se puede convertir(Timer!)-> Void to((CFRunLoopTimer?)-> Void)!-Conversión de extensión NSTimer a Swift 3



timer.scheduledtimer swift 4 (1)

Estoy tratando de convertir un Pod que estoy usando en mi proyecto a Swift 3. No lo escribí, pero el autor original no lo ha actualizado, así que lo bifurqué, estoy tratando de hacerlo yo mismo. Pero...

Me sale este error al intentar convertir una extensión a NSTimer a Swift 3: Cannot convert value of type ''(Timer!) -> Void'' to expected argument type ''((CFRunLoopTimer?) -> Void)!

Parece que el tipo de controlador Swift 3, (Timer!) -> Void no es compatible con los manejadores de estilo de la vieja escuela CFRunLoop , pero no estoy seguro de cómo convertir esto mientras se mantiene la compatibilidad con iOS 9.

Estoy pegando el código siguiente, como lo convirtió Xcode. Puede encontrar el código original en https://github.com/entotsu/TKSubmitTransition/blob/master/SubmitTransition/Classes/NSTimerEx.swift

Aclamaciones

import Foundation extension Timer { class func schedule(delay delay: TimeInterval, handler: (Timer!) -> Void) -> NSTimer { let fireDate = delay + CFAbsoluteTimeGetCurrent() let timer = CFRunLoopTimerCreateWithHandler(kCFAllocatorDefault, fireDate, 0, 0, 0, handler) // Error on this line CFRunLoopAddTimer(CFRunLoopGetCurrent(), timer, kCFRunLoopCommonModes) return timer } class func schedule(repeatInterval interval: TimeInterval, handler: @escaping (Timer!) -> Void) -> Timer { let fireDate = interval + CFAbsoluteTimeGetCurrent() let timer = CFRunLoopTimerCreateWithHandler(kCFAllocatorDefault, fireDate, interval, 0, 0, handler) // And this line CFRunLoopAddTimer(CFRunLoopGetCurrent(), timer, kCFRunLoopCommonModes) return timer } }


Pruebe de esta manera:

extension Timer { class func schedule(delay: TimeInterval, handler: ((Timer?) -> Void)!) -> Timer! { let fireDate = delay + CFAbsoluteTimeGetCurrent() let timer = CFRunLoopTimerCreateWithHandler(kCFAllocatorDefault, fireDate, 0, 0, 0, handler) CFRunLoopAddTimer(CFRunLoopGetCurrent(), timer, .commonModes) return timer } class func schedule(repeatInterval interval: TimeInterval, handler: ((Timer?) -> Void)!) -> Timer! { let fireDate = interval + CFAbsoluteTimeGetCurrent() let timer = CFRunLoopTimerCreateWithHandler(kCFAllocatorDefault, fireDate, interval, 0, 0, handler) CFRunLoopAddTimer(CFRunLoopGetCurrent(), timer, .commonModes) return timer } }