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/newDurationSeconds
到 N=digits
的字符串值,但语法是我不明白的。
如何将其翻译成 Swift 3?
第一个参数提供所需的小数位数,由 *
表示,第二个值是数字。
在Swift:
String(format: "1/%.*f", digits, 1/newDurationSeconds)
注意:此功能由 Foundation 框架提供。您必须 import Foundation
(或 import UIKit
或 import 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))
在 Apple 的示例代码之一中,我看到以下几行:
int digits = MAX( 0, 2 + floor( log10( newDurationSeconds)));
self.exposureDurationValueLabel.text = [NSString stringWithFormat:@"1/%.*f", digits, 1/newDurationSeconds];
我无法理解语法,stringWithFormat:
有两个参数,但只有一个 %
符号。我知道它是 1/newDurationSeconds
到 N=digits
的字符串值,但语法是我不明白的。
如何将其翻译成 Swift 3?
第一个参数提供所需的小数位数,由 *
表示,第二个值是数字。
在Swift:
String(format: "1/%.*f", digits, 1/newDurationSeconds)
注意:此功能由 Foundation 框架提供。您必须 import Foundation
(或 import UIKit
或 import 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))