如何在Swift 4中编写GCD asyncAfter?

时间:2017-09-23 09:48:28

标签: swift grand-central-dispatch swift4

在早期版本的Swift中,这段代码非常有效。

DispatchQueue.main.asyncAfter(deadline: .now() + delay) { timer in
    self.setOriginalState()
    self.shakeAnimation()
}

但是在Swift 4中出现以下错误:

  

对成员'asyncAfter(截止日期:qos:flags:execute:)'

的模糊引用

如何在Swift 4中运行一系列代码之前创建延迟?

2 个答案:

答案 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)

这最终会使编译器无声。