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

时间:2017-12-29 10:41:29

标签: 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")
    }
}

3 个答案:

答案 0 :(得分:7)

DispatchTime.now()是双倍的。您不能将float和double值一起添加。 (可以找到关于为何无法添加不同类型值的小解释here)。

替换

var time: Float = 2.2

var time: Double = 2.2

它会正常工作。

答案 1 :(得分:4)

您可以DispatchTimeInterval用户DispatchTime添加时间。

例如:

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

    print("Hello")

}

答案 2 :(得分:1)

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

使用此行时:

  Visits Visits2   Country     channel     date Visits3 spend     Margin...
1  11206   14106 Argentina Total Likes 01-01-12     106    99     0.056
2  11652   14552 Argentina Total Likes 01-02-12      87   107     0.057
3  12004   14904 Argentina Total Likes 01-03-12      89    97     0.077
4  12497   15397 Argentina Total Likes 01-04-12     101    98     0.030
5  12701   15601 Argentina Total Likes 01-05-12     101    87     0.098

你没有指定2.2是什么类型,系统认为它是DispatchTime类型并允许它。

但是当你使用这一行时:

let when = DispatchTime.now() + 2.2 // <---- THIS IS OKAY

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

这样转换可能最容易:

let whenWhen = DispatchTime.now() + time // <---- THIS IS NOT OKAY