swift - 我可以直接从该类的成员执行该类的函数中的参数吗?

标签 swift

这是我的代码:

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/

相关文章:

ios - 创建无声音频 CMSampleBufferRef

swift - 编译错误使用未解析的标识符 'addButtonPressed'

ios - 来自 NSURLSession 的动态数据的单元格行的高度

swift - 无法将字典提取为 [String : Any] from vapor request context

ios - 如何更改 TableView 中的标签文本颜色(数据存储在数组中)

xcode - Swift Parse.com 无法检索对象

ios - 滚动到tableview的顶部并显示大标题iOS

ios - CALayers : A) Can I draw directly on them and B) How to make a width adjustment on a superlayer affect a sublayer

xcode - localizable.string 不适用于 iOS 8 中的模拟器

swift - JSQMessageAvatarImageFactory错误