这是我的代码:
class LocalizedStrings{
static let collect = NSLocalizedString("Collect %d coins", comment: "")
class func returnLocalizedStringWithFormat(text: String, value: Int) -> String{
return String.localizedStringWithFormat(text, value)
}
}
要获取具有某种格式的变量 collect,我需要调用:
LocalizedString.collect.returnLocalizedStringWithFormat(text: collect, value: 100)
那里有两次collect
。我想知道是否可以将 collect
直接用作“文本”的参数。所以它应该是这样的:
LocalizedString.collect.returnLocalizedStringWithFormat(value: 100)
最佳答案
制作自定义 LocalizedString
结构。
struct LocalizedString {
var text: String
var comment: String
}
extension LocalizedString {
func returnLocalizedStringWithFormat(value: Int) -> String {
let localizedStringOrigin = NSLocalizedString(text, comment: comment)
return String.localizedStringWithFormat(localizedStringOrigin, value)
}
}
然后你的本地化字符串存储:
struct LocalizedStrings{
static let collect = LocalizedString(text: "Collect %d coins", comment: "")
static let cook = LocalizedString(text: "Make %d cookies", comment: "")
}
用法:
LocalizedStrings.collect.returnLocalizedStringWithFormat(value: 100)
LocalizedStrings.cook.returnLocalizedStringWithFormat(value: 100)
打印:
"Collect 100 coins"
"Make 100 cookies"
__
附言从技术上讲,您可以简单地扩展 String
:
extension String {
func localized(value: Int) -> String {
return String.localizedStringWithFormat(self, value)
}
}
每当你有这样的类(class)时:
class LocalizedStrings{
static let collect = NSLocalizedString("Collect %d coins", comment: "")
}
只需调用:
LocalizedStrings.collect.localized(value: 100)
但这绝对是一个糟糕的设计,因为 localized
对所有字符串都可用,包括可本地化(由 NSLocalizedString(..)
返回)和不可本地化。因此,更好的做法是使用封装方法的单独实体。
关于swift - 我可以直接从该类的成员执行该类的函数中的参数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47456510/