正文
在實(shí)際項(xiàng)目中,你可能會遇到一些場景需要使用格式化輸出的。比如,在一個倒計時的UI界面,需要顯示還剩多少分鐘和多少秒(3:09),要求秒始終顯示兩位。
版本一:
let minutes: Int = 5
let seconds: Int = 9
let secondsStr = String(format: "%02ld", seconds)
let result = "\(minutes):\(secondsStr)" // "5:09"
這個需求實(shí)現(xiàn)起來很簡單,我們使用String的格式化的初始化方法就可以了。這里要注意格式化標(biāo)識符要使用%ld,不能使用%d,否則在64位的機(jī)器上有可能會出現(xiàn)跟你期待不一樣的結(jié)果。
版本二:
extension Int {
public func format(_ f: String) -> String {
return String(format: "%\(f)ld", self)
}
}
let minutes: Int = 5
let seconds: Int = 9
let secondsStr = seconds.format("02")
let result = "\(minutes):\(secondsStr)"
這個版本我做了一些優(yōu)化,因?yàn)楦袷交址看螌懫饋碛悬c(diǎn)麻煩,很容易忘記。為了我為Int寫了一個擴(kuò)展。這樣以后使用起來就方便了。
同樣的我們也可以為Double寫類似的擴(kuò)展來實(shí)現(xiàn)取小數(shù)點(diǎn)后幾位的功能。
extension Double {
public func format(_ f: String) -> String {
return String(format: "%\(f)f", self)
}
}
let pi: Double = 3.14159265
let str = pi.format(".2") // "3.14"
總結(jié)
- 這個小功能實(shí)現(xiàn)起來很簡單,但是我們開發(fā)可能經(jīng)常忘記,寫起來也很麻煩。通過給需要實(shí)現(xiàn)格式化輸出的類型寫一個Extension來優(yōu)化書寫和記憶,從而節(jié)省開發(fā)時間。
- 為了完整性,我們應(yīng)該給所有的整形(Int8,UInt8,Int16...)都加上這個擴(kuò)展。我已經(jīng)這么做了,請查考SwiftDevHints。你可以直接在你的項(xiàng)目中使用它。
參考
聯(lián)系方式
備注
我們在軟件開發(fā)的過程中,為了提高效率,其中很重要的一環(huán)就是把反復(fù)使用到的功能或模塊封裝起來。因此我在GitHub上開源了一個小工具集 - SwiftDevHints,來總結(jié)自己在實(shí)際項(xiàng)目開發(fā)過程中封裝的一些小功能。
剛剛介紹的只是其中一個小功能,想看看其它更多功能,請直接點(diǎn)擊SwiftDevHints。如果您覺得對您有所幫助,請給一個star吧。