Swift开发小技巧系列 — 格式化输出

在实际项目中,你可能会遇到一些场景需要使用格式化输出的。比如,在一个倒计时的UI界面,需要显示还剩多少分钟和多少秒(3:09),要求秒始终显示两位。

版本一:

let minutes: Int = 5
let seconds: Int = 9
let secondsStr = String(format: “%02ld”, seconds)
let result = “\(minutes):\(secondsStr)”

这个需求实现起来很简单,我们使用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”)

总结

  • 这个小功能实现起来很简单,但是我们开发可能经常忘记,写起来也很麻烦。通过给需要实现格式化输出的类型写一个Extension来优化书写和记忆,从而节省开发时间。
  • 为了完整性,我们应该给所有的整形(Int8,UInt8,Int16…)都加上这个扩展。我已经这么做了,请查考SwiftDevHints。你可以直接在你的项目中使用它。

参考资料

备注

我们在软件开发的过程中,为了提高效率,其中很重要的一环就是把反复使用到的功能或模块封装起来。因此我在GitHub上开源了一个小工具集 — SwiftDevHints,来总结自己在实际项目开发过程中封装的一些小功能。

刚刚介绍的只是其中一个小功能,想看看其它更多功能,请直接点击SwiftDevHints。如果您觉得对您有所帮助,请给一个star吧。


Originally published at blog.zhoudengfeng.com on September 14, 2017.