在早期版本的Swift中,这段代码非常有效。
DispatchQueue.main.asyncAfter(deadline: .now() + delay) { timer in
self.setOriginalState()
self.shakeAnimation()
}
但是在Swift 4中出现以下错误:
对成员'asyncAfter(截止日期:qos:flags:execute:)'
的模糊引用
如何在Swift 4中运行一系列代码之前创建延迟?
答案 0 :(得分:3)
在游乐场尝试它没有任何问题,只是“缺失”是“计时器”参考。
DispatchQueue.main.asyncAfter(deadline: .now() + 3) {
print("Dispatching after")
}
DispatchQueue.main.asyncAfter(deadline: .now() + 3, qos: .userInteractive, flags: []) {
print("Dispatching after")
}
它们似乎都有效,你确定问题不在其他地方吗?
答案 1 :(得分:1)
编译器似乎无法推断asyncAfter
调用中的参数类型。所以你可能想要指定这样的类型:
DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + delay)
如果仍然出现同样的错误,请确保delay
的类型为DispatchTimeInterval
。这是另一个例子:
DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + DispatchTimeInterval.milliseconds(300)
这最终会使编译器无声。