Как использовать перечисления для функций класса - PullRequest
0 голосов
/ 27 мая 2019

Я работаю над проектом и создал класс для обработки ответа json, чтобы преобразовать его в модальный класс и изменить его на запрос json с обновленными данными, если это необходимо.

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

Я даже пытался использовать как

enum Fields {
   case Name
   case Email
}

но Fields.Email возвращает объект Fields

если я использую протокол переменной типа

protocol someProtocol {
      var name: String { get }
}

extension someProtocol {
     var name:String {
         return String(describing: self)
     }
}

, а затем расширить enum Fields:someProtocol тогда я могу использовать его как Fields.name.name or Fields.email.name

Но мой клиент не одобрит это. Я хочу создать перечисление, чтобы я мог получить доступ к строке напрямую, как для имени. Мне нужен ключ «Имя», и я должен получить его как «Fields.name» или «.name»

Итак, здесь у меня две цели

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

-

class PersonService {
    class Update {
        var name = ""
        var email = ""
        var personId = 0

        func createDataFrom(dic:[AnyHashable : Any]) -> Update {
            let update = Update()

            update.name = dictionary["Name"]
            update.email = dictionary["Email"]
            update.personId = dictionary["Id"]

            return update
        }

        func createDataTo() -> [AnyHashable:Any] {
            var ret = [AnyHashable : Any]()

            ret["Name"] = name
            ret["Email"] = email
            ret["Id"] = personId

            return ret
        }
    }
}

1 Ответ

0 голосов
/ 27 мая 2019

Что-то в этом роде?

enum Fields: String {
   case Name = "Name"
   case Email = "Email"
}
Print(Fields.Name.rawValue)
result: "Name"

Или

struct Constants {
    static let name = "Name"
    static let email = "Email"
}
print(Constants.name)
result: "Name"
...