Swift 格式化本地化字符串

Swift Formatting Localized Strings

我们正在使用 OneSky 来翻译字符串。我们在字符串文件中使用位置说明符。我 运行 遇到的问题是在字符串中使用 %s 时。

我有一个字符串:"dist_unit_mask" = "%1$s %2$s";,我从 Localization.strings 文件中读取并尝试格式化:String(format: NSLocalizedString(@"dist_unit_mask", comment: @"Distance and Units"), dist, unit)

这会导致应用程序崩溃,但是当我将字符串更改为 "dist_unit_mask" = "%1$@ %2$@"; 时,应用程序不会崩溃。使用 $s 而不是 %@ 时可能导致应用程序崩溃的原因是什么?我想从OneSky下载后不修改字符串文件。

%s 格式(带或不带位置说明符)需要一个 C 字符串,即指向 char 的 NUL 终止序列的指针, 而不是 Swift 字符串。

如果您真的必须保留 %s 格式,那么

String(format: NSLocalizedString(...),
    (dist as NSString).cStringUsingEncoding(NSUTF8StringEncoding),
    (unit as NSString).cStringUsingEncoding(NSUTF8StringEncoding))

应该可以。