以前在 Objective-C 中,我可以这样做:
NSInteger count = 100;
NSString *text = [NSString stringWithFormat:@"count: %@", @(count)];
Objective-C 引入了自动装箱原始文字的概念,因此我不必处理 %d
、%ld
等。它会自动转换将原始文字转换为 NSObject
,格式化程序将其解析为 %@
。
在 swift 中,我们可以做类似的事情吗?
let count: Int = 100
let text = String.init(format: "count of %@", count)
上面的崩溃是因为 count
不是指向对象的指针。
我知道我可以像这样进行内联参数注入(inject):
let text = "count of \(count)"
但由于本地化的目的,需要在更新参数之前对字符串格式进行本地化,而上面的代码无法做到这一点。
最佳答案
使用基础类型和桥接到NSNumber
?
let count1: NSNumber = 100 // 100
let count2: NSNumber = 0.0 // 0
let count3: NSNumber = 2.73 // 2.73
let text = String(format: "count of %@ %@ %@", count1, count2, count3) // "count of 100 0 2.73"
这确实是“自动装箱”所做的,它将基本类型包装在 Objective-C NSNumber
对象中。
关于objective-c - 如何自动装箱原始文字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40366579/