目前我在调用函数之前使用它在后台线程上等待5秒:DispatchQueue.global(qos: .background).asyncAfter(deadline: .now() + 5, execute: {
这很好但我想每次等待一段时间。 做这样的事情:
let randomTime = Int(arc4random_uniform(10))
DispatchQueue.global(qos: .background).asyncAfter(deadline: .now() + randomTime, execute: {
给我错误:Type of expression is ambiguous without more context
干杯。
答案 0 :(得分:2)
尝试以下代码:
let randomTime = Int(arc4random_uniform(10))
DispatchQueue.main.asyncAfter(deadline: .now() + .seconds(randomTime)) {
print("Delay is \(randomTime) sec")
//Do something here
}
您还可以使用.microseconds(Int)
和.nanoseconds(Int)
,具体取决于您的要求。
答案 1 :(得分:0)
.now()返回DispatchTime类型。像
这样的东西DispatchQueue.global(qos: .background).asyncAfter(deadline: DispatchTime(uptimeNanoseconds: [any_random_generator]......
应该这样做。请注意,any_random_generator必须返回UInt64并且时间以纳秒表示
答案 2 :(得分:0)
查看Dispatch
的文档,+
运算符似乎有两个重载对您有用:
public func +(time: DispatchTime, interval: DispatchTimeInterval) -> DispatchTime
public func +(time: DispatchTime, seconds: Double) -> DispatchTime
我建议您使用第二个功能并初始化Double
而非Int
,就像您现在尝试做的那样:
let randomTime = Double(arc4random_uniform(10))