无法访问Swift枚举值

时间:2015-12-02 09:16:05

标签: ios objective-c swift enums

我在下面的课程中定义了枚举:

public class MyError: NSError {

    public enum Type: Int {
        case ConnectionError
        case ServerError
    }

    init(type: Type) {
        super.init(domain: "domain", code: type.rawValue, userInfo: [:])
    }
}

当我尝试在我的测试中稍后检查错误时:

expect(error.code).to(equal(MyError.Type.ConnectionError.rawValue))

我收到编译错误:Type MyError.Type has no member ConnectionError

我在这里做错了什么想法?

2 个答案:

答案 0 :(得分:6)

问题是Type是一个Swift关键字,而您的自定义Type会混淆编译器。

在我在Playground中的测试中,您的代码生成了相同的错误。解决方案是更改Type以获取任何其他名称。 Kind的示例:

public enum Kind: Int {
    case ConnectionError
    case ServerError
}

init(type: Kind) {
    super.init(domain: "domain", code: type.rawValue, userInfo: [:])
}

然后

MyError.Kind.ConnectionError.rawValue

按预期工作。

答案 1 :(得分:2)

enum的问题在于它的名称:Swift使用.Type来访问类型:

if childMirror.valueType is String.Type {  
  println("property is of type String")
}

将其重命名为其他内容将解决问题。