2015-06-03 52 views
2

我有一個包含一個枚舉的結構:找不到枚舉一個名爲Type

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)°" 
     } 
    } 
} 

當我嘗試在代碼中的其他地方使用的枚舉,編譯器給我一個錯誤。這個問題似乎與用於枚舉的名稱有關,因爲當我重命名它時錯誤消失。

例如與命名爲ENUM類型:

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

使用智能感知,TemperatureUnit顯示類型屬性,又具有Type屬性[...]這些類型的屬性都具有一個類型屬性韓元讓我訪問我的實際枚舉類型。

錯誤:不能調用類型 'TemperatureUnit' 初始化與類型的參數列表 '(類型:TemperatureUnit)' 與枚舉

工作示例類名爲:

TemperatureUnit(type: TemperatureUnit.Kind.Celsius) 

有誰知道爲什麼名爲Type的枚舉不起作用?

編輯:

類型是一個保留關鍵字,我們可以發現有以下幾個環節。 (DOC蘋果的信息,在 「關鍵字和標點符號」)

回答

1

Type是斯威夫特的保留字。如果你想正確使用它,你需要對這個詞使用反引號。所以聲明你的枚舉與

public enum `Type` { 
    *stuff* 
} 

種類不是一個保留字,所以它不會拋出一個錯誤。您不能將保留字用作變量名稱,而不能正確轉義它們。

+1

查看[this](https://swift.unicorn.tv/articles/reserved-words-in-swift-and-how-to-escape-them)瞭解更多信息! – Kilenaitor

+0

偉大的鏈接!這是一種遺憾,我無法在Swift文檔中找到保留的關鍵字。也許我沒有看到這個好地方。 –

+0

是的。必須保持警惕,因爲他們有時會改變。特別是因爲它太新了。如果您有任何其他問題,請告訴我!否則,如果你能接受答案,那會很棒。 :) – Kilenaitor