2016-07-01 4 views
7

Я пытаюсь создать CocoaPod для Swift 3. Поскольку CocoaPods использует Nimble и Quick, и эти библиотеки еще не обновлены, я разблокировал репозитории и пытаюсь их преобразовать.Был ли setTimer устарел в Swift 3?

В проворный проекте есть функция вызывается с подписью:

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.

Есть ли замена?

ответ

0

В Xcode 8 бета-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, где объявлены эти методы.

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

вместо этого, и это работа для меня

Смежные вопросы