如何修复无法使用类型为((DispatchTime,Int64))的参数列表来调用类型'dispatch_time_t'的初始化程序

时间:2019-04-14 03:43:42

标签: swift4 grand-central-dispatch

我正在研究一个基于Swift 2的旧教程,该教程是一个单词匹配(字谜)游戏,以了解有关Swift(https://www.raywenderlich.com/2185-how-to-make-a-letter-word-game-with-uikit-and-swift-part-3-3)的更多信息,并且遇到了编写代码尝试时遇到的问题使用Grand Central Dispatch(GCD)调度一些块对象以禁用发射器并将其从其超级视图中删除。错误消息:

  

无法使用类型为((DispatchTime,Int64)''的参数列表来调用类型为'dispatch_time_t'的初始化程序

由于本教程中的代码在Swift 2中,因此我尝试将某些语法转换为Swift 4.2(例如:DISPATCH_TIME_NOWDispatchTime.now()),但是随后我遇到了其他错误,导致现在一个。

这是教程中的原始代码。它位于名为didMoveToSuperview()的覆盖函数中:

//disable the emitter
var delay = Int64(0.1 * Double(NSEC_PER_SEC))
var delayTime = dispatch_time(DISPATCH_TIME_NOW, delay)
dispatch_after(delayTime, dispatch_get_main_queue()) {
    self.disableEmitterCell()
}

//remove explosion view
delay = Int64(2 * Double(NSEC_PER_SEC))
delayTime = dispatch_time(DISPATCH_TIME_NOW, delay)
dispatch_after(delayTime, dispatch_get_main_queue()) {
    self.removeFromSuperview()
}

这就是我试图做的:

//disable the emitter

var delay = Int64(0.1 * Double(NSEC_PER_SEC))
var delayTime = dispatch_time_t(DispatchTime.now(), delay)
dispatch_after(delayTime, dispatch_get_main_queue()) {
    self.disableEmitterCell()
}

//remove explosion view
delay = Int64(2 * Double(NSEC_PER_SEC))
delayTime = dispatch_time_t(DispatchTime.now(), delay)
dispatch_after(delayTime, dispatch_get_main_queue()) {
    self.removeFromSuperview()
}

这是教程页面中的一项例外:https://www.raywenderlich.com/2185-how-to-make-a-letter-word-game-with-uikit-and-swift-part-3-3

  

在这里,您正在使用Grand Central Dispatch调度块以禁用发射器并将其从其超级视图中删除。首先,您安排1/10秒的延迟来禁用发射器,然后在2秒的延迟后,再次调用以从其父视图中移除爆炸视图。为什么不删除视图呢?您想让爆炸的粒子飞走并溶解,然后消除效果。

0 个答案:

没有答案