在 Swift 中为 NSDateComponenstFormatter 设置多个 allowedUnits

Setting multiple allowedUnits for NSDateComponenstFormatter in Swift

背景:

使用 NSDateComponentsFormatter 格式化 NSTimeInterval 时,使用 allowedUnits 属性 将结果字符串四舍五入到相关时间单位通常很方便。

例如,我可能对精确到秒的时间不感兴趣,因此将 allowedUnits 设置为分钟可获得适当舍入的输出字符串:

let duration: NSTimeInterval = 3665.0    // 1 hour, 1 minute and 5 seconds
let durationFormatter = NSDateComponentsFormatter()

durationFormatter.unitsStyle = .Full
durationFormatter.zeroFormattingBehavior = .DropAll
durationFormatter.allowedUnits = .Minute

let formattedDuration = durationFormatter.stringFromTimeInterval(duration)

formattedDuration 将是“61 分钟”。

问题:

您如何将 allowedUnits 设置为 .Hour.Minute,以便格式化持续时间改为“1 小时 1 分钟”?

NSDateComponentFormatter Class Reference 并没有真正涵盖如何做到这一点。

我提出的解决方案是通过将所需允许单位的原始值相加来创建 NSCalendarUnit

durationFormatter.allowedUnits = NSCalendarUnit(rawValue: NSCalendarUnit.Hour.rawValue + NSCalendarUnit.Minute.rawValue)

我不想知道是否有更好的语法或替代方法来执行此操作。

按照 Leo 的建议,您可以简单地在数组中提供 allowedUnits,如下所示:

durationFormatter.allowedUnits = [.Hour, .Minute]