2016-09-20 15 views
2

私は自分のプロジェクトで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 
    } 
} 

答えて

13

を元のコードを見つけることができます。このようにしてみてください。

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 
    } 
} 
+1

ありがとうございました!!!それはうまくいった –

関連する問題