2015-06-03 3 views
2

У меня есть структура, которая содержит перечисление:Не может найти Enum с именем типа

public struct TemperatureUnit : Unit 
{ 
    public enum Type 
    { 
     case Celsius 
     case Fahrenheit 
    } 

    public var type:Type 

    public init(type:Type) 
    { 
     self.type = type 
    } 

    public func getFormattedStringForValue(value:Int) -> String 
    { 
     if (self.type == .Celsius) 
     { 
      return "\(value) °C" 
     } 
     else 
     { 
      return "\(value)°" 
     } 
    } 
} 

Когда я пытаюсь использовать перечисление где-то в коде, компилятор дает мне ошибку. Проблема связана с именем, используемым для перечисления, поскольку ошибка исчезает, когда я переименовываю его.

пример с перечислением имени как Тип:

TemperatureUnit(type: TemperatureUnit.Type.Celsius) // Error 

Использование IntelliSense, TemperatureUnit показывает тип собственности, который, в свою очередь, имеет свойство Type [...], и эти свойства типа все имеющие тип собственности вон 'Позвольте мне получить доступ к моим фактическим типам перечислений.

Ошибка:Не удается вызвать инициализатор для типа 'TemperatureUnit' со списком аргументов типа '(тип: TemperatureUnit)'

рабочий пример с перечислением назван Вид:

TemperatureUnit(type: TemperatureUnit.Kind.Celsius) 

Кто-нибудь знает, почему перечисление с именем Тип не будет работать?

EDIT:

Тип зарезервированное слово, как мы можем узнать, со следующими ссылками. (Информация от Apple Дока находится под "Ключевые слова и пунктуация")

ответ

1

Type является зарезервированным словом в Swift. Если вы хотите использовать его правильно, вам нужно использовать обратные ссылки на слово. Поэтому объявите ваш перечислимый номер с помощью

public enum `Type` { 
    *stuff* 
} 

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

+1

См. [Это] (https://swift.unicorn.tv/articles/reserved-words-in-swift-and-how-to-escape-them) для получения дополнительной информации! – Kilenaitor

+0

отличная ссылка! Жаль, что я не смог найти зарезервированные ключевые слова в документе Swift. Возможно, я не смотрел на хорошее место. –

+0

Да. Нужно следить за тем, как они иногда меняются. Быстро, особенно потому, что это так ново. Если у вас есть другие вопросы, дайте мне знать! В противном случае, если бы вы могли принять ответ, это было бы здорово. :) – Kilenaitor

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