加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-14 04:48:53 所属栏目:百科 来源:网络整理
导读:出于某种原因,使用带有嵌套枚举的嵌套类名为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
出于某种原因,使用带有嵌套枚举的嵌套类名为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()
    }
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读