2017-03-28 81 views
3

目前我使用此等待在後臺線程每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

嘗試使用'TimeInterval(arc4random_uniform(10))'代替。該錯誤意味着編譯器不確定你想要做什麼。但是我從來沒有在這麼簡單的代碼中看到這個錯誤。 – TheValyreanGroup

回答

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)取決於您的要求。

+0

完美。謝謝! – P3rry

+0

DispatchQueue.main.asyncAfter(截止時間:.now()+ .seconds(randomTime))會拋出以下錯誤:「表達式的類型不明確,沒有更多上下文」 - 主要是以下語句中的+:.now()+ .seconds( randomTime) – iosforme

0

.now()返回一個DispatchTime類型。類似於

DispatchQueue.global(qos: .background).asyncAfter(deadline: DispatchTime(uptimeNanoseconds: [any_random_generator]...... 

應該這樣做。注意,any_random_generator必須返回UINT64和時間在納秒

0

望着文檔的Dispatch,似乎有兩個重載的+操作員會爲你工作:

public func +(time: DispatchTime, interval: DispatchTimeInterval) -> DispatchTime 

public func +(time: DispatchTime, seconds: Double) -> DispatchTime 

我建議使用第二個函數並初始化的Double代替Int喜歡你」現在重試:

let randomTime = Double(arc4random_uniform(10)) 
相關問題