使用DispatchTime.now()+ float延迟?

Ale*_*lex 10 swift

究竟是怎么回事 DispatchTime.now()

为什么我不能指定等待变量的时间?

我怎么能使用变量?

给出错误>>>

二进制运算符'+'不能应用于'DispatchTime'和'Float'类型的操作数

var time : Float = 2.2 // <---time 

@IBAction func buttonPressed(_ sender: Any) {

    let when = DispatchTime.now() + 2.2 // <---- THIS IS OKAY
    DispatchQueue.main.asyncAfter(deadline: when){

        print("Hello")
    }

    let whenWhen = DispatchTime.now() + time // <---- THIS IS NOT OKAY
    DispatchQueue.main.asyncAfter(deadline: whenWhen){

        print("Hello")
    }
}
Run Code Online (Sandbox Code Playgroud)

Dha*_*esh 15

DispatchTime.now()是双重的.您不能将float和double值一起添加.(可以在这里找到关于为什么不能添加不同类型的值的小解释).

更换

var time: Float = 2.2
Run Code Online (Sandbox Code Playgroud)

var time: Double = 2.2
Run Code Online (Sandbox Code Playgroud)

它会工作正常.

  • 你不需要“双”。只需执行:“let time = 2.2”,“time”默认为“Double”。 (2认同)

Jay*_*nki 8

您可以DispatchTimeInterval在中添加时间DispatchTime

例如 :

let whenWhen = DispatchTime.now() + DispatchTimeInterval.milliseconds(time*1000)
DispatchQueue.main.asyncAfter(deadline: whenWhen){

    print("Hello")

}
Run Code Online (Sandbox Code Playgroud)


Uph*_*uth 6

错误消息几乎解释了这一点。您不能将 float 和 DispatchTime 添加在一起,因为它们是不同的数据类型。

当你使用这条线时:

let when = DispatchTime.now() + 2.2 // <---- THIS IS OKAY
Run Code Online (Sandbox Code Playgroud)

您没有指定 2.2 是什么类型,系统会断定它是 DispatchTime 类型并允许它。

但是,当您使用这一行时:

let whenWhen = DispatchTime.now() + time // <---- THIS IS NOT OKAY
Run Code Online (Sandbox Code Playgroud)

您已经确定时间是浮点数,这就是生成错误的地方。

像这样转换可能是最简单的:

DispatchTimeInterval.milliseconds(Int(time * 1000))
Run Code Online (Sandbox Code Playgroud)