2016-11-10 59 views
0

我有一个功能,可根据用户首选项NSUserDefaults将分钟转换为小数或HH:MM字符串。例如,90分钟可以是1.51:30将时间转换功能更改为Swift扩展

这里是我的功能:

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斯威夫特扩展。我很难知道我需要重写以完成所有转换。

任何想法如何使这个扩展?

回答

0

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

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

您还可以选择扩展NSNumberFormatter

+0

谢谢,这是有道理的。如何用'NSNumberFormatter'扩展名来看?我需要使用它,因为我将它传递给只接受“NSNumberFormatter”来更改图形标签的图形插件。 –

+0

只需用'extension NSNumberFormatter'替换'extension Int'并且意识到'self'将会是'NSNumberFormatter'而不是'Int'。尝试一下,如果你遇到某些特定的问题,请提出另一个问题。 – par