static vs enum, который я должен использовать в swift - PullRequest
0 голосов
/ 09 февраля 2019

iOS 12, Swift 4.2

Оба из них делают одно и то же, что лучше?

private struct fieldV {
  static let billV = 1
  static let centV = 2
  static let payerV = 3
}

private enum fieldInt: Int {
  case bill
  case cent
  case payers
}

Использование первого немного более очевидно, так что я получил это.

percent.tag = fieldV.centV 

против

percent.tag = fieldInt.cent.rawValue

Конечно, я говорю о 3 разных Интс против одного Инт, который может иметь одно из трех значений?Но есть ли лучшая причина для использования одного или другого?

Ответы [ 2 ]

0 голосов
/ 09 февраля 2019

Если у вас ограничено известных опций, вы должны использовать enum . Enum может быть CaseIterable, и вы можете использовать его в случаях all одновременно!Вы можете switch для перечисления, и оно автоматически отслеживает добавление и удаление дел, если вы не используете default дело.Это невозможно с struct или классом.Даже если вы хотите использовать Int значение напрямую без rawValue, вам следует рассмотреть возможность использования static внутри enum следующим образом:

private enum Field {
  static let bill = 1
  static let cent = 2
  static let payer = 3
}

В качестве названия вашего случая это выглядит как Int значение - это то, что вы хотите сравнить или что-то, что вы должны отправить на сервер и т. д., и оно не является частью самого Field.Поэтому я рекомендую вместо этого использовать некоторое вычисляемое свойство, кроме rawValue!

private enum Field {
    case bill
    case cent
    case payers

    var intValue: Int {
        switch self {
        case .bill: return 1
        case .cent: return 2
        case .payers: return 3
        }
    }
}

Это может занять больше времени и времени на запись, но это более удобно и защищено от ошибок.Вы можете добавить пользовательский инициализатор, если хотите.

- Еще одна вещь

В swift вам следует рассмотреть возможность использования заглавных букв для верблюдатипы.(Enum, Struct, Class)

0 голосов
/ 09 февраля 2019

Структура и перечисления принципиально отличаются в том смысле, что:

  1. Структуры, подобные классам, являются типами продуктов.Это означает, что для представления объекта структуры вам нужны все поля.Например, давайте возьмем структуру Сотрудник с двумя полями имя и адрес.Сотрудник в этом случае определяется как адресом, так и именем.
  2. С другой стороны, перечисления имеют тип суммы.Это означает, что они представлены любым полем.Например, давайте возьмем enum NetworkStatus , который может быть или SUCCESS или FAILURE

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

В вашем случае ясно, что Structs является правильнымответьте, как вам нужно счет, цент и плательщики все три поля для представления полной информации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...