7

我正在尝试为 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)

自动完成显示所有 setTimer 方法都已弃用,但从我发现它们不应该。

有替代品吗?

4

2 回答 2

8

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

相反,这对我有用

于 2016-09-28T06:46:02.140 回答
0

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

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

如果您插入正确的DispatchTime参数DispatchTimeInterval,它将编译,您将看到弃用警告:

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

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

于 2016-07-01T14:56:22.433 回答