String.localizedStringWithFormat returns 错误结果

String.localizedStringWithFormat returns wrong result

我正在尝试本地化包含范围如 1..2 的字符串。我正在使用 String.localizedStringWithFormat:

func testLocalizableString() -> String {
    let lowerBound = 1
    let upperBound = 2
    return String.localizedStringWithFormat(
        NSLocalizedString("Unit.Meters.Range", value:"%d-%dm", comment: ""),
        [lowerBound, upperBound]
    )
}

但是,我得到了奇怪的结果:“103,413,600-0m”。

如果我只使用一个参数(只是“%dm”,而不是“%d-%dm”)并且只传递一个数字,一切都很好。

我的代码可能有什么问题以及如何使用 CVarArg 参数正确格式化可本地化的字符串?

中的第二个参数
String.localizedStringWithFormat(_ format: String, _ arguments: CVarArg...)

是一个可变参数,表示必须传递零个或多个 指定类型的参数,而不是数组:

func testLocalizableString() -> String {
    let lowerBound = 1
    let upperBound = 2
    return String.localizedStringWithFormat(
        NSLocalizedString("Unit.Meters.Range", value:"%ld-%ldm", comment: ""),
        lowerBound, upperBound
    )
}

另请注意,Int 的格式说明符是 %ld,而不是 %d