2016-11-10 70 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