簡體   English   中英

在Swift中,如何將格式化的Int值插入String?

[英]In Swift, how to insert formatted Int value into String?

這似乎是一個超級基本的問題,但我似乎無法在任何地方找到答案:-(我能夠在Objective C中做到這一點,但我陷入了Swift的困境。

我需要做什么:

  1. 取整數值
  2. 將其格式化為本地化字符串
  3. 使用stringWithFormat等效方法將值注入另一個字符串(因為另一個字符串也是本地化的,下面的簡化示例中未顯示)

如何在Objective C中輕松完成 - 這有效:

    // points is of type NSNumber *

    NSNumberFormatter *formatter = [NSNumberFormatter new];
    formatter.locale             = [NSLocale currentLocale];
    formatter.numberStyle        = NSNumberFormatterDecimalStyle;

    NSString *ptsString = [formatter stringFromNumber:points];
    NSString *message   = [NSString stringWithFormat:@"You've earned %@ points", ptsString];

我最好嘗試在Swift中執行此操作 - 最后一行編譯錯誤:

    // points is of type Int

    let formatter         = NSNumberFormatter()
    formatter.locale      = NSLocale.currentLocale()
    formatter.numberStyle = NSNumberFormatterStyle.DecimalStyle

    let ptsString = formatter.stringFromNumber(points)!
    let message   = String(format: "You've earned %@ points", arguments: ptsString)

我在最后一行的Xcode中遇到以下錯誤:

"Cannot convert value of type 'String' to expected argument type '[CVarArgType]'"

(在我的實際代碼中,我想插入點值的消息本身也是本地化的,但我已經簡化了這個例子,因為我在兩種情況下都得到完全相同的錯誤。)

我在這里想念的是什么..?

非常感謝你的幫助,

埃里克

您需要將參數包裝在集合中。 像這樣:

let message   = String(format: "You've earned %@ points", arguments: [ptsString])

您也可以使用此方法:

let message   = "You've earned \(ptsString) points"

此外,您可以創建一個擴展方法來執行此操作:

extension String {
    func format(parameters: CVarArgType...) -> String {
        return String(format: self, arguments: parameters)
    }
}

現在你可以這樣做:

let message = "You've earned %@ points".format("test")
let message2params = "You've earned %@ points %@".format("test1", "test2")

有時,你需要更多的控制 - 所以如果你需要有前導零,你可以使用'stringWithFormat'就像在objective-C中一樣

let ptsString = String(format: "%02d", points)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM