2015-06-03 28 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