【问题标题】:How to write an extension for all constant of struct?如何为结构的所有常量编写扩展?
【发布时间】:2018-05-31 06:41:37
【问题描述】:

我有一个本地化结构,可以帮助管理本地密钥。

struct Localization {

//Home
static let HomeHeader         =   "Home_Header"
static let HomeStatusActive   =   "Home_Status_Active"
static let HomeStatusDelayed  =   "Home_Status_Delayed"
}

另外,我有一个名为 local 的字符串扩展名,它为我提供了 Localizable.strings 文件中的密钥。

extension String {
    var local : String {
        return LocalizationManager.getLocalizedString(key: self)
    }
}

所以当我需要本地化密钥时,我会这样使用它;

titleLabel.text = Localization.HomeHeader.local

我的问题;有没有一种方法可以对结构的每个常量执行扩展,而无需每次都调用 .local?

基本上,我想如下调用;

titleLabel.text = Localization.HomeHeader

非常感谢。

【问题讨论】:

    标签: ios swift struct


    【解决方案1】:

    对您到目前为止已实施的内容进行最小的更改。您可以简单地在字符串值之后添加本地。

    struct Localization {
    
        //Home
        static let HomeHeader         =   "Home_Header".local
        static let HomeStatusActive   =   "Home_Status_Active".local
        static let HomeStatusDelayed  =   "Home_Status_Delayed".local
    }
    
    extension String {
        var local : String {
            return LocalizationManager.getLocalizedString(key: self)
        }
    }
    

    然后你就可以像这样使用它了:

    titleLabel.text = Localization.HomeHeader
    

    【讨论】:

      【解决方案2】:

      请检查以下内容可能对您有帮助

      您可以将所有本地化字符串保存在一个地方

      struct ConstantsLocalized {
          static var key_loading: String {
              return "key_loading".localized()
          }
          static var key_placeholder_email: String {
              return "key_placeholder_email".localized()
          }
      }
      

      你可以通过ConstantsLocalized.key_loading访问它

      编辑

      我需要用这种方法再增加一个优势,如果你在应用程序本地化意味着用户可以从应用程序自己更改语言,那么这是最好的解决方案,因为你每次都可以获得本地化字符串

      希望对你有帮助

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-05-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-07-17
        • 1970-01-01
        相关资源
        最近更新 更多