setTimer 在 Swift 3 中被弃用了吗?
Posted
技术标签:
【中文标题】setTimer 在 Swift 3 中被弃用了吗?【英文标题】:Was setTimer deprecated in Swift 3? 【发布时间】:2016-07-01 14:34:41 【问题描述】:我正在尝试为 Swift 3 创建一个 CocoaPod。因为 CocoaPods 使用 Nimble 和 Quick,而这些库尚未更新,所以我分叉了 repos 并尝试转换它们。
在 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 方法都已弃用,但从我found 来看,它们不应该是。
有替代品吗?
【问题讨论】:
【参考方案1】:在 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))
改为,它对我有用
【讨论】:
【参考方案2】:在 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 接口源代码。
【讨论】:
以上是关于setTimer 在 Swift 3 中被弃用了吗?的主要内容,如果未能解决你的问题,请参考以下文章
AUGraph 在 iOS 上被弃用了吗?如果是这样,啥时候?
`shouldOverrideUrlLoading` 真的被弃用了吗?我可以用啥代替?