将时间转换功能更改为Swift Extension

时间:2016-11-10 04:54:41

标签: swift swift3 nsnumberformatter swift-extensions

我有一个函数可以根据NSUserDefaults中的用户首选项将分钟转换为十进制或HH:MM字符串。

例如,90分钟可以是1.51:30

这是我的功能:

func decimalOrHHMM(value:Int) -> String{
  let totalMinutes = Double(value)

  let defaults = UserDefaults.standard
  if defaults.string(forKey: "displayTotalsAs") == "hhmm"{
    //HH:MM
    let hours = floor(totalMinutes/60)
    let minutes = totalMinutes.truncatingRemainder(dividingBy: 60) //This gives us the remainder
    let hrs = String(format: "%.0f", hours) //Remove tenths place
    var mins = ""
    if minutes < 10{
      //Prepend 0
      mins = String(format: "0%.0f", minutes)
    }else{
      mins = String(format: "%.0f", minutes)
    }
    return "\(hrs):\(mins)"
  }else{
    //Decimal
    return String(format: "%.1f", totalMinutes/60)
  }
}

这很好用,但我想知道这是否可以某种方式转换为NSNumberFormatter Swift扩展。我无法知道我需要覆盖什么才能进行所有转换。

我知道如何将其作为扩展吗?

1 个答案:

答案 0 :(得分:0)

这是Swift扩展的基本结构,您可以使用函数而不是计算属性,但由于您的原始函数采用Int值,因此计算属性是有意义的。

extension Int {
    var decimalOrHHMM: String {
        return "\(self)" // do your actual conversion here
    }
}

您也可以选择延长NSNumberFormatter