将iOS UISegmentControl转换为CFTimeInterval类型

时间:2017-07-08 02:17:18

标签: swift casting

使用Swift 3,我在此声明中有一个硬编码值:

var lastDisplayLinkTimeStamp: CFTimeInterval!

 if self.lastDisplayLinkTimeStamp >= 30
 {
    totalTimes += 1
  }

但是现在我已经设置了一个段控件,让用户选择30.0,45.0或60.0作为值而不是硬编码值。

我知道我可以使用以下方法获取所选片段的标题文本:

durationSegment.titleForSegment(at: durationSegment.selectedSegmentIndex

我认为会产生一个字符串? (可选字符串)

但是如何将if语句中要接受的文本的durationSegment.titleForSegment转换为CFTimeInterval,或者我认为Double也被接受?

我使用CFTimeInterval或Double或Float强制转换

尝试了几种变体
 if self.lastDisplayLinkTimeStamp >= Double(durationSegment.titleForSegment(at: durationSegment.selectedSegmentIndex)
 {
    totalTimes += 1
  }

但仍然会收到如下错误:

  

二元运算符'> ='不能应用于类型的操作数   'CFTimeInterval!'和'双倍?'

1 个答案:

答案 0 :(得分:0)

不要使用细分的标题。标题仅供显示,不应代表您的数据。

一种解决方案是创建一个时间间隔数组:

let possibleTimeIntervals: [CFTimeInterval] = [ 30.0, 45.0, 60.0 ]

然后根据选定的细分获取值:

let selectedSegment = durationSegment.selectedSegmentIndex
if selectedSegment != UISegmentedControlNoSegment {
    let timeInterval = possibleTimeIntervals[selectedSegment]
    if self.lastDisplayLinkTimeStamp >= timeInterval {
        totalTimes += 1
    }
}

BTW - 您甚至可以使用possibleTimeIntervals数组使用数字格式化程序创建细分。