【问题标题】:Change Time Conversion Function to Swift Extension将时间转换函数更改为 Swift 扩展
【发布时间】:2016-11-10 04:54:40
【问题描述】:

我有一个函数可以根据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 swift3 nsnumberformatter swift-extensions


    【解决方案1】:

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

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

    您也可以选择扩展NSNumberFormatter

    【讨论】:

    • 谢谢,这是有道理的。使用NSNumberFormatter 扩展名会是什么样子?我需要使用它,因为我将它传递给一个图形插件,该插件只接受 NSNumberFormatter 来更改图形的标签。
    • 只需将extension Int 替换为extension NSNumberFormatter 并意识到self 将是NSNumberFormatter 而不是Int。试一试,如果您遇到特定问题,请提出另一个问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-06-06
    • 2015-04-30
    • 2020-07-14
    • 1970-01-01
    • 2017-08-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多