Swift ENUM, как конвертировать "rawValue" обратно в регистр Enum? - PullRequest
0 голосов
/ 05 сентября 2018

У меня есть перечисление:

  enum  switch : String {
      case on = "powerOn"
      case off = "powerOff"
      var japanswitch : String {
          case .on : return "onpu"
          case .off : return "offu"
      }
  }

В моем коде моя функция передала "powerOn" как чистый строковый параметр. Проблема в том, что некоторые функции моей функции требуют перевода powerOn в japanswitch.

Но проблема в том, что «powerOn» прямо сейчас - не более чем простая строка, которая вообще не имеет отношения к japanswitch.

Как мне перевести "powerOn" на japanswitch? Желаемый результат должен быть "onpu".

Ответы [ 6 ]

0 голосов
/ 05 сентября 2018

Попробуйте это

enum  ABC : String {
      case on = "powerOn"
      case off = "powerOff"
      var japanswitch : String {
       return self == .on ? "onpu" : "offu"
      }
  }

  var a = ABC(rawValue: "powerOn")
  print(a!.japanswitch)
0 голосов
/ 05 сентября 2018

Совершенно другое решение, если вы используете только enum для перевода, вы можете заменить его словарем

let japaneseTranslation = ["powerOn": "onpu", "powerOff": "offu"]
...
let offJapanese = japaneseTranslation["powerOff"]
0 голосов
/ 05 сентября 2018
enum Switch : String {
case on = "powerOn"
case off = "powerOff"

var japanswitch : String {
    switch self {
    case .on:
        return "onpu"
    case .off:
        return "offu"
    }
}}

Вы не можете использовать регистр без оператора switch. Так что можете попробовать приведенный выше фрагмент. после определения перечисления, как указано выше, в соответствии с официальным документом Apple вы можете преобразовать строковое значение в перечисление следующим образом.

Если вы определяете перечисление с типом необработанного значения, перечисление автоматически получает инициализатор, который принимает значение необработанного тип значения (как параметр с именем rawValue) и возвращает либо регистр или ноль. Вы можете использовать этот инициализатор, чтобы попытаться создать новый экземпляр перечисления.

Этот пример идентифицирует japanswitch из Switch необработанного значения "powerOn":

let japanswitchValue = Switch(rawValue: "powerOn")?.japanswitch
0 голосов
/ 05 сентября 2018

Сначала вам нужно исправить код так, чтобы он компилировался:

enum  Switch : String {
    case on = "powerOn"
    case off = "powerOff"
    var japanswitch : String {
        switch self {
        case .on : return "onpu"
        case .off : return "offu"
        }
    }
}

Тогда вы сможете достичь того, что вы есть, после использования:

let japanese = Switch(rawValue:"powerOn")?.japanswitch

Обратите внимание, что japanese будет необязательным; вам нужно решить, как вы будете обрабатывать недопустимое необработанное значение.

0 голосов
/ 05 сентября 2018

Ваш вопрос не очень понятен, было бы полезно, если бы вы показали нам код, который пытаетесь запустить, используя это перечисление, но я думаю, что вы можете сделать что-то вроде этого:

import Foundation 

enum SwitchType: String {
    case on = "powerOn"
    case off = "powerOff"

    var japaneseRepresentation : String {
        switch (self){
            case Toggle.on : return "onpu"
            case Toggle.off : return "offu"
            default: return Toggle.on.japaneseRepresentation
        }
    }

    init(japanString japanString: String) {
        switch(japanString) {
            case "onpu": self = Toggle.on
            case "offu": self = Toggle.off
            default: self = Toggle.on
        }
    }

}

let a = Toggle(rawValue: "powerOn")
print(a)
let b = Toggle(japanString: "onpu")
print(b)
print(a == b)

Преимущество этого состоит в том, что вы можете иметь собственный инициализатор для работы с тем же перечислением, но инициализировать его из строки японцев.

0 голосов
/ 05 сентября 2018

Ключевое слово «switch» нельзя использовать в качестве идентификатора, поэтому вам нужно добавить еще одно ключевое слово, как показано ниже:

      enum  SwitchType : String {
            case on = "powerOn"
            case off = "powerOff"
            var japanswitch : String {
                switch self {
                case .on : return "onpu"
                case .off : return "offu"
                }
            }
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...