swift - 将时间转换函数更改为 Swift 扩展

标签 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 扩展。我无法知道需要覆盖什么才能完成所有转换。

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

最佳答案

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

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

您还可以选择扩展NSNumberFormatter

关于swift - 将时间转换函数更改为 Swift 扩展,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40520194/

相关文章:

ios - textView 高度等于没有 viewDidLayoutSubviews 的内容大小

ios - 使用 Google SpreadSheet API 更新 iOS Swift 中的特定行

ios - 在Swift 3中单击选项卡栏项时,从底部打开弹出窗口?

cocoa - 将数字格式化为序数? (第一、第二等..)

ios - NSNumberFormatter SpellOutStyle 为 "and"

快速重新加载当前 View

swift - 在 AFNetworking 中调用 Objective C 代码时完成处理程序不起作用

swift - 在嵌套闭包中捕获值

swift - 没有四舍五入的数字格式。 Xcode 中的一种行为在 playground 中转换出另一种行为

ios - SKAction 播放声音不是从头开始