我正在研究一个基于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_NOW
到DispatchTime.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秒的延迟后,再次调用以从其父视图中移除爆炸视图。为什么不删除视图呢?您想让爆炸的粒子飞走并溶解,然后消除效果。