The Pragmatic Ball boy

iOSを中心にやってる万年球拾いの老害エンジニアメモ

DispatchQueue.main.asyncAfter(deadline: .now() + 1.0)はなぜnanosecondではなくsecondになるか

あんまり気にしてる人はいないかもしれないですが、普段何も考えずに DispatchQueue.main.asyncAfter(deadline: .now() + 1.0) を使っているとdeadline: DispatchTime はsecond単位っぽく感じるかもしれないですが、nanosecondです。

DispatchTime

DispatchTime represents a point in time relative to the default clock with nanosecond precision.

なんで1.0足してるのに秒になるかというと演算子オーバーロードされてるんですね・・

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

理解して使ってればいいんですが、個人的にはちょっと紛らわしいと思うので DispatchQueue.main.asyncAfter(deadline: .now() + .seconds(1)) のほうがいいかなと思ったりします。