gpt4 book ai didi

ios - 无法将 (Timer!) -> Void 转换为 ((CFRunLoopTimer?) ->Void)! - 将 NSTimer 扩展转换为 Swift 3

转载 作者:可可西里 更新时间:2023-10-31 23:55:35 33 4
gpt4 key购买 nike

我正在尝试将我在我的项目中使用的 Pod 转换为 Swift 3。我没有写它,但原作者没有更新它所以我 fork 了我自己尝试做的任何东西。但是……

我在尝试将 NSTimer 的扩展转换为 Swift 3 时遇到此错误:无法将类型“(Timer!) -> Void”的值转换为预期的参数类型“((CFRunLoopTimer?) -> Void)!

似乎 Swift 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
}
}

最佳答案

像这样尝试:

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

关于ios - 无法将 (Timer!) -> Void 转换为 ((CFRunLoopTimer?) ->Void)! - 将 NSTimer 扩展转换为 Swift 3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39595873/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com