Функция переформатирования для быстрого синтаксиса 3.0

Обратите внимание, что я не создавал эту функцию, это часть библиотеки, которая не обновлялась ее создателем. Может ли кто-нибудь дать совет, как переключить функцию на swift 3.0?

func debounce( delay:TimeInterval, queue:DispatchQueue, action: @escaping (()->()) ) -> ()->() {
         lastFireTime = dispatch_time(DISPATCH_TIME_NOW,0)
         dispatch_after(dispatch_time(DISPATCH_TIME_NOW,dispatchDelay),queue) {
         let now = dispatch_time(DISPATCH_TIME_NOW,0)
         let when = dispatch_time(lastFireTime, dispatchDelay)
         if now >= when {
         action()
         }
         }

    }
}

person Joshua Unrau    schedule 27.09.2016    source источник
comment
Удалите тип объекта из метода, если он работает. См. stackoverflow.com/a/39526497/3463712.   -  person Max    schedule 27.09.2016


Ответы (1)


C API

dispatch_time_t
     dispatch_time(dispatch_time_t base, int64_t offset);

 void
     dispatch_after(dispatch_time_t when, dispatch_queue_t queue,
         void (^block)(void));

в Swift та же функциональность доступна через инфраструктуру Dispatch (import Dispatch), которая является хорошей объектно-ориентированной инфраструктурой, созданной поверх C API. Попробуйте следующий фрагмент в Playground, а затем проверьте текущую документацию Apple, чтобы получить дополнительные сведения.

import PlaygroundSupport
PlaygroundPage.current.needsIndefiniteExecution = true

import Foundation
import Dispatch

let queue = DispatchQueue(label: "my queue")

// call the block asynchronously after some time
print(1, "now is", Date())

queue.asyncAfter(deadline: .now() + .seconds(5)) {
    print()
    print(3, "now is", Date())
    PlaygroundPage.current.finishExecution()
}

print(2, "now is", Date())

Хорошей отправной точкой для начинающих является здесь

Я предлагаю вам прочитать Беглый взгляд на Grand Central Dispatch и Swift 3 с большим количеством информации в очень сжатой форме.

person user3441734    schedule 22.05.2017