2015-08-22 3 views
2

Хорошо, я сделал домашнее задание и прочитал, что я могу найти, но я не могу найти, если это можно сделать с помощью Swift. У меня есть перечисление, которое я использую повсюду: SomeEnum и один, если он case s является длинным SomeEnum.SomeLengthyCaseName, и я устал видеть его по всему моему коду. Я не хочу рефакторировать, потому что мне нравится описательный характер дела, когда новичок сохраняет мой код.Swift typealias for enum case

Итак, вот вопрос: можно ли создать typealias для SomeEnum.SomeLengthyCaseName? И если да, то как? Вот что я пытался:

enum SomeEnum { 
    case SomeLengthyCaseName 
} 

typealias SLCN = SomeEnum.SomeLengthyCaseName 

Это синтаксис, но Xcode дает ошибку компилятора о том, что «SomeLenghtyCaseName не является членом SomeEnum

Готовность, комплект, ход!

ответ

6

Это misleading error message.

Реальная проблема заключается в том, что SomeLengthyCaseName является не тип. Поэтому вы не можете использовать typealias, который предназначен только для псевдонимов типов. (Например, вы могли бы сказать typealias SE = SomeEnum.)

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

let SLCN = SomeEnum.SomeLengthyCaseName 

Или, лучше, статическую константу на самом перечислении:

enum SomeEnum { 
    case SomeLengthyCaseName 
    static let SLCN = SomeEnum.SomeLengthyCaseName 
} 

let x: SomeEnum = .SLCN 
+0

Ач ! Лицевая ладонь! Я не знаю, почему я этого не осознавал. Спасибо что подметил это. И спасибо за альтернативные решения. Мне нравится вторая, потому что это не таинственность, откуда появился «псевдоним». Я соглашусь, как только буфер закончится. –

1

Это невозможно, так как SomeEnum.SomeLengthyCaseName не является типом, это значение для типа SomeEnum.

Смежные вопросы