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

时间:2017-11-23 13:18:26

标签: 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作为'text'的参数。所以看起来应该是这样的:

LocalizedString.collect.returnLocalizedStringWithFormat(value: 100)

2 个答案:

答案 0 :(得分:3)

制作自定义let objectA = {}; let objectB = {}; let dico = {}; dico[(<any>Object).id(objectA)] = "value1"; // or dico[Object['id'](objectA);] = "value1"; // If you are not using typescript you don't need the casting dico[Object.id(objectA)] = "value1" 结构。

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)

__

<强> P.S。从技术上讲,您可以简单地扩展"Collect 100 coins" "Make 100 cookies"

String

每当你有这样的课时:

extension String {
    func localized(value: Int) -> String {
        return String.localizedStringWithFormat(self, value)
    }
}

只需致电:

class LocalizedStrings{
    static let collect = NSLocalizedString("Collect %d coins", comment: "")
}

但这绝对是糟糕的设计,因为LocalizedStrings.collect.localized(value: 100) 可用于所有字符串,两者都可以本地化(由localized返回)而不是。因此,更好的做法是使用封装方法的单独实体。

答案 1 :(得分:0)

我认为您的目标是通过UI本地化简化您的工作。如果是这样,我强烈建议您使用SwiftGen。它也适用于资产,颜色,字体,故事板。

使用它有很多好处:

  • 使用String
  • 时,请避免使用任何拼写错误
  • 免费自动完成
  • 避免使用不存在的资产名称的风险

所有这些都将由编译器确保。