私は自分のプロジェクトでSwift 3に使用しているPodを変換しようとしています。私は書いていませんが、元の著者はそれを更新していないので、自分でそれをする。しかし...(Timer!) - > Void to((CFRunLoopTimer?) - > Void)に変換できません! - NSTimerエクステンションをSwift 3に変換する
私はスウィフト3にNSTimer
に拡張子を変換しようとすると、このエラーが出る: Cannot convert value of type '(Timer!) -> Void' to expected argument type '((CFRunLoopTimer?) -> Void)!
それはスウィフト3ハンドラタイプと思われ、(Timer!) -> Void
は古い学校CFRunLoop
スタイルハンドラーと互換性がありません、 iOS 9との互換性を維持しながらこれを変換する方法がわかりません。
Xcodeで変換された以下のコードを貼り付けています。あなたはhttps://github.com/entotsu/TKSubmitTransition/blob/master/SubmitTransition/Classes/NSTimerEx.swift
乾杯
で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
}
}
ありがとうございました!!!それはうまくいった –