如何在 Swift 4 中编写 GCD asyncAfter?
How do I write GCD asyncAfter in Swift 4?
在 Swift 的早期版本中,此代码可以完美运行。
DispatchQueue.main.asyncAfter(deadline: .now() + delay) { timer in
self.setOriginalState()
self.shakeAnimation()
}
但是在Swift4中出现如下错误:
Ambiguous reference to member 'asyncAfter(deadline:qos:flags:execute:)'
如何在 Swift 4 中的 运行 代码序列之前创建延迟?
在 playground 中尝试没有任何问题,只是 "missing" 是 "timer" 参考。
DispatchQueue.main.asyncAfter(deadline: .now() + 3) {
print("Dispatching after")
}
DispatchQueue.main.asyncAfter(deadline: .now() + 3, qos: .userInteractive, flags: []) {
print("Dispatching after")
}
它们似乎都有效,您确定问题不在其他地方吗?
编译器似乎无法推断出 asyncAfter
调用中的参数类型。所以你可能想像这样指定类型:
DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + delay)
如果您仍然遇到相同的错误,请确保 delay
的类型为 DispatchTimeInterval
。这是另一个例子:
DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + DispatchTimeInterval.milliseconds(300)
这最终应该使编译器静音。
在 Swift 的早期版本中,此代码可以完美运行。
DispatchQueue.main.asyncAfter(deadline: .now() + delay) { timer in
self.setOriginalState()
self.shakeAnimation()
}
但是在Swift4中出现如下错误:
Ambiguous reference to member 'asyncAfter(deadline:qos:flags:execute:)'
如何在 Swift 4 中的 运行 代码序列之前创建延迟?
在 playground 中尝试没有任何问题,只是 "missing" 是 "timer" 参考。
DispatchQueue.main.asyncAfter(deadline: .now() + 3) {
print("Dispatching after")
}
DispatchQueue.main.asyncAfter(deadline: .now() + 3, qos: .userInteractive, flags: []) {
print("Dispatching after")
}
它们似乎都有效,您确定问题不在其他地方吗?
编译器似乎无法推断出 asyncAfter
调用中的参数类型。所以你可能想像这样指定类型:
DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + delay)
如果您仍然遇到相同的错误,请确保 delay
的类型为 DispatchTimeInterval
。这是另一个例子:
DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + DispatchTimeInterval.milliseconds(300)
这最终应该使编译器静音。