二元运算符' - '不能应用于两个(NSDate?)运算符

时间:2015-08-04 14:09:45

标签: sum nsdate nsdateformatter

尝试从开始时间和结束时间获得总时间。

我的DateFormatter正如下面的Extension.swift一样,但我对计算底部时间 - 开始时间的方式感到困惑。

感谢任何帮助。感谢

Extension.swift

extension NSDate{
var bottomtimestringValue: String{
    return self.toString()
}

func tobottomtimeString() -> String {
    let formatter = NSDateFormatter()
    formatter.dateFormat = "yyyy-MMM-dd"
    let str = formatter.stringFromDate(self)
    return str
}
}

extension String{
var bottomtimedateValue: NSDate?{
    return self.toDate()
}

func tobottomtimeDate() -> NSDate? {
    let formatter = NSDateFormatter()
    formatter.dateFormat = "yyyy-MMM-dd"
    if let date = formatter.dateFromString(self) {
        return date
    }else{
        // if format failed, Put some code here
        return nil // an example
    }
}
}

Adddivelogviewcontroller.swift

var a = (textFieldStartTime.text.starttimedateValue)
    var b = (textFieldEndTime.text.endtimedateValue)
    var sum = b - a
    textFieldBottomTime.text = "\(sum)"

2 个答案:

答案 0 :(得分:0)

这是正确的 - -运算符没有为NSDate?定义,所以你找不到那种差异。由于ab都是NSDate?,您可以找到这样的差异:

if let dateA = a, dateB = b {
    let difference = dateA.timeIntervalSinceReferenceDate - dateB.timeIntervalSinceReferenceDate
}

此处,difference的类型为NSTimeInterval?

或者如果您愿意,可以为-添加NSDate?的定义,可能如下所示:

func -(lhs:NSDate?, rhs:NSDate?) -> NSTimeInterval? {
    if let left=lhs, right=rhs {
        return left.timeIntervalSinceReferenceDate - right.timeIntervalSinceReferenceDate
    } else {
        return nil
    }
}

添加它,您可以使用上面的-

答案 1 :(得分:-1)

好的,不确定这是否有效,但我没有错误。在结束时间选择器OK botton被按下后我需要做什么计算

func OK3ButtonTapped(sender: UIBarButtonItem) {
    self.textFieldEndTime.endEditing(true)
    self.textFieldEndTime.text = endtimePickerView.date.endtimestringValue

    var a = (textFieldStartTime.text.starttimedateValue)
    var b = (textFieldEndTime.text.endtimedateValue)
  var difference: String = ""
  if let dateA = a, dateB = b {
    let difference = dateA.timeIntervalSinceReferenceDate - dateB.timeIntervalSinceReferenceDate
  }
  textFieldBottomTime.text = "\(difference)"       
}