微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

swift – 嵌套类中名为`Type`的枚举失败

出于某种原因,使用带有嵌套枚举的嵌套类名为Type dosen不能很好地使用 swift编译器.

class A {

    class B {

        enum Type {
            case One
            case Two
        }

        let myC: Type

        init(myC: Type) {
            self.myC = myC
        }

    }

    func getB(myC: B.Type) -> B {
        return B(myC: myC) // ERROR 1
    }

}

let a = A()
let b = a.getB(.Two) // ERROR 2

上面的代码产生两个错误:’A.B.Type’不能转换为’A.B.Type’,’A.B.Type.Type’没有名为’Two’的成员.

以下案例确实有效:

> A级以外的B级
>让b = A.B(myC:.Two)
>枚举C而不是枚举类型

这是Swift中的一个错误还是这个预期的行为?输入我们不应该使用的保留名称吗?

解决方法

B.Type指的是B类的元类型,这就是编译器不喜欢你定义一个名为’Type’的内部枚举的原因.

您可以使用Type in variable / constant声明来进行类反射:

class A {

    required init() {}
}

class B {
    var a: A.Type
    var aInstance: A

    init() {
        a = A.self
        aInstance = a()
    }
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐