2016-11-10 5 views
0

私は、ユーザの設定をNSUserDefaultsに基づいて分を10進数またはHH:MM文字列に変換する関数を持っています。時間変換機能をSwift Extensionに変更する

たとえば、90分は、1.5または1: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スウィフト拡張子に変換できる場合、私は思ったんだけど。私はすべての変換を行うために私が上書きする必要があることを知るのに困っています。

これをどのように拡張することができますか?

答えて

0

これはSwift拡張の基本構造です。計算されたプロパティの代わりに関数を使用できますが、元の関数の値はIntなので、計算されたプロパティは意味があります。

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

また、NSNumberFormatterを拡張することもできます。

+0

ありがとうございます。 'NSNumberFormatter'拡張はどのように見えますか?グラフのラベルを変更するための 'NSNumberFormatter'しか受け付けないグラフプラグインに渡しているので、これを使用する必要があります。 –

+0

'extension Int 'を' extension NSNumberFormatter'で置き換え、 'self'が' Int'ではなく 'NSNumberFormatter'になることを実現してください。それを試してみてください、そして、あなたが何か特定のものにこだわっていたら、別の質問をしてください。 – par

関連する問題