正文
在实际项目中,你可能会遇到一些场景需要使用格式化输出的。比如,在一个倒计时的UI界面,需要显示还剩多少分钟和多少秒(3:09),要求秒始终显示两位。
版本一:
let minutes: Int = 5
let seconds: Int = 9
let secondsStr = String(format: "%02ld", seconds)
let result = "\(minutes):\(secondsStr)" // "5:09"
这个需求实现起来很简单,我们使用String的格式化的初始化方法就可以了。这里要注意格式化标识符要使用%ld
,不能使用%d
,否则在64位的机器上有可能会出现跟你期待不一样的结果。
版本二:
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)"
这个版本我做了一些优化,因为格式化字符串每次写起来有点麻烦,很容易忘记。为了我为Int写了一个扩展。这样以后使用起来就方便了。
同样的我们也可以为Double写类似的扩展来实现取小数点后几位的功能。
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"
总结
- 这个小功能实现起来很简单,但是我们开发可能经常忘记,写起来也很麻烦。通过给需要实现格式化输出的类型写一个Extension来优化书写和记忆,从而节省开发时间。
- 为了完整性,我们应该给所有的整形(Int8,UInt8,Int16...)都加上这个扩展。我已经这么做了,请查考SwiftDevHints。你可以直接在你的项目中使用它。
参考
联系方式
备注
我们在软件开发的过程中,为了提高效率,其中很重要的一环就是把反复使用到的功能或模块封装起来。因此我在GitHub上开源了一个小工具集 - SwiftDevHints,来总结自己在实际项目开发过程中封装的一些小功能。
刚刚介绍的只是其中一个小功能,想看看其它更多功能,请直接点击SwiftDevHints。如果您觉得对您有所帮助,请给一个star吧。