Как добавить больше случаев для enum в swift - PullRequest
0 голосов
/ 02 ноября 2018

Я пытаюсь добиться следующего в Swift. Добавление большего количества дел в перечисление, а не редактирование в существующем.

Например, у меня есть следующее перечисление, и я хочу добавить больше дел, используя расширение, а не редактировать исходное перечисление.

enum UIType: String, Codable {
    case borderButton = "border_button"
    case bottomSheet = "bottom_sheet"
}

Теперь, если я хочу добавить больше элементов в enum

case borderLabel = "border_Label"

Ответы [ 2 ]

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

Это невозможно. Добавление case к enum в расширении сравнимо с добавлением (не вычислено) property для class или struct. (Это тоже невозможно)

См. Также документацию:

Расширения добавляют новые функциональные возможности к существующему классу, структуре, перечислению или типу протокола. Это включает в себя возможность расширять типы, для которых у вас нет доступа к исходному исходному коду (известный как ретроактивное моделирование). - https://docs.swift.org/swift-book/LanguageGuide/Extensions.html

Расширение может просто добавить новую функциональность.

Добавление свойств изменит размер памяти , необходимый для хранения объекта.

0 голосов
/ 04 ноября 2018

перечисления не могут быть добавлены за пределы (например, расширения / категории для классов) перечисления по уважительной причине. Например, допустим, у вас есть enum, в котором есть только два случая. Вы бы использовали его в случае коммутатора, как показано ниже:

var myEnumVar : MyEnumType = ....;
// ..... later on
switch(myEnumVar) {
   case MyEnumCase1: //....
   break;
   case MyEnumCase2: // do some other stuff
   break;
}

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

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