【问题标题】:NSString stringWithFormat syntaxNSString stringWithFormat 语法
【发布时间】:2017-04-19 09:35:44
【问题描述】:

在 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?

【问题讨论】:

    标签: objective-c swift nsstring stringwithformat


    【解决方案1】:

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

    在 Swift 中:

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

    注意:此功能由 Foundation 框架提供。你必须import Foundation(或import UIKit或import Cocoa)才能工作。

    您可以找到格式字符串 here (Apple's Documentation) 和 here (IEEE printf specification) 的文档。

    在第二个文档中,* 有解释:

    字段宽度或精度或两者都可以用星号 ('*') 表示。在这种情况下,int 类型的参数提供字段宽度或精度。

    【讨论】:

    【解决方案2】:

    您可以使用 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))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-14
      相关资源
      最近更新 更多