这个问题在这里已有答案:
我正在研究一个基于Swift 2的旧教程,这是一个单词匹配(anagram)游戏,以了解有关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'的初始值设定项
由于来自教程中的代码是在夫特2,我试图一些语法转换为夫特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秒后,再次调用以从其父级中删除爆炸视图。为什么不删除视图?
发布于 2019-04-15 13:20:32
使用我的delay
实用工具方法,然后你可以重写为
delay(0.1) {
self.disableEmitterCell()
}
和
delay(2) {
self.removeFromSuperview()
}
https://stackoverflow.com/questions/-100006590
复制相似问题