是否在Swift 3中弃用了setTimer?

时间:2016-07-01 14:34:41

标签: swift3 quick-nimble

我正在尝试为Swift 3创建一个CocoaPod。因为CocoaPods使用NimbleQuick,而这些库还没有更新,我分配了回购并尝试转换它们。

在Nimble项目中,有一个名为:

的函数
setTimer(start: DispatchTime, interval: UInt64, leeway: UInt64)

编译器说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)

auto-complete显示所有setTimer方法都已弃用,但是我不应该使用found

有替代品吗?

2 个答案:

答案 0 :(得分:7)

在Swift 3.0中你应该使用

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

相反,它对我有用

答案 1 :(得分:0)

在Xcode 8 beta 1中,该方法的签名是:

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

如果您插入了正确的DispatchTimeDispatchTimeInterval参数,它将进行编译,您将看到弃用警告:

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

与往常一样,命令+单击这些Swift类和方法将使您进入声明这些方法的Swift接口源。