等待后台线程随机时间

时间:2017-03-28 22:04:44

标签: swift

目前我在调用函数之前使用它在后台线程上等待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

干杯。

3 个答案:

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