NSString stringWithFormat 语法

NSString stringWithFormat syntax

在 Apple 的示例代码之一中,我看到以下几行:

int digits = MAX( 0, 2 + floor( log10( newDurationSeconds)));
self.exposureDurationValueLabel.text = [NSString stringWithFormat:@"1/%.*f", digits, 1/newDurationSeconds];

我无法理解语法,stringWithFormat: 有两个参数,但只有一个 % 符号。我知道它是 1/newDurationSecondsN=digits 的字符串值,但语法是我不明白的。

如何将其翻译成 Swift 3?

第一个参数提供所需的小数位数,由 * 表示,第二个值是数字。

Swift:

String(format: "1/%.*f", digits, 1/newDurationSeconds)

注意:此功能由 Foundation 框架提供。您必须 import Foundation(或 import UIKitimport Cocoa)才能正常工作。

您可以找到格式字符串 here (Apple's Documentation) and here (IEEE printf specification).

的文档

在第二个文档中,对*的解释是:

A field width, or precision, or both, may be indicated by an asterisk ( '*' ). In this case an argument of type int supplies the field width or precision.

您可以使用 NumberFormatter 代替 C 风格的格式字符串;它通常更清晰,但更长:

  let newDurationSeconds = Double(10.7)
  let digits = max(0,2 + (log10(newDurationSeconds).rounded(.towardZero)))
  let formatter = NumberFormatter()
  formatter.maximumFractionDigits = Int(digits)
  let s = formatter.string(from: NSNumber(value: newDurationSeconds))