Можно ли ссылаться на перечисление Swift как на переменную? - PullRequest
0 голосов
/ 20 сентября 2019

Я централизую все строки моего приложения в перечислениях, и все эти строки имеют пространство имен для функции приложения, в которой они используются (пример ниже).

Когда я пытаюсь сохранить перечисление в переменной (как var strings = Strings.Feature.SubFeature) и назовите его как strings.someStringValue, я получаю ошибку Expected member name or constructor call after name type.

Декларация:

enum Strings {
     enum Feature {
          enum Subfeature {
               static var someString: String { "some string".localizedLowerCase }
          }
     }
}

Callsite:

someLabel.text = Strings.Feature.Subfeature.string

Надежное поведение:

var strings = Strings.Feature.Subfeature
someLabel.text = strings.someString

Можно ли сохранить ссылку на содержащий перечисление, так что мне не придется каждый раз ссылаться на полный путьЯ использую данную строку?Я хотел бы знать, есть ли альтернативные способы решения этой проблемы.

Ответы [ 3 ]

4 голосов
/ 20 сентября 2019

Ответ Joakim выглядит так, как будто он отвечает на ваш вопрос, но другой вариант (с потенциально меньшим использованием памяти?) Будет использовать typealias.

typealias SubFeatureStrings = Strings.Feature.Subfeature

, а затем

SubFeatureStrings.someString

typealias может быть вложен в класс / структуру, где вы его вызываете, чтобы избежать конфликтов в вашем приложении.

1 голос
/ 20 сентября 2019
enum Strings {
    enum Feature {
        enum Subfeature {
            static var someString: String { "some string".localizedLowerCase }
            static var otherString: String { "some other string".localizedLowerCase }
        }
    }
}

var strings = Strings.Feature.Subfeature.self
someLabel.text = strings.someString
someLabel.text = strings.someOtherString
0 голосов
/ 20 сентября 2019

Перечисление может быть enum <#name#> : String

enum Foo : String {
    case bar = "bar"
}

использование: <#something#>.text = Foo.bar.rawValue


Для связанных целей

enum SomeEnum {
    enum Foo : String {
        case bar = "bar"
    }
}

использование: <#something#>.text = SomeEnum.Foo.bar.rawValue


Затем вы можете набрать цепочку:

typealias foo = SomeEnum.Foo
<#something#>.text = foo.bar.rawValue
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...