XXXX!.Type 没有会员 YYYY

XXXX!.Type does not have a memeber YYYY

class SomeClass {
    class var category: Int {
        return 1class SomeClass {
    class var category: Int {
        return 1
    }
}

class AnotherClass {
    var someClass: SomeClass!

    init() {
        someClass = SomeClass()
    }
}

var a = AnotherClass()
println("\(a.someClass.dynamicType.category)")   // error: SomeClass!.Type does not have a member named category
println("\(SomeClass.category)")  // print 1

当然可以SomeClass.category, 这里只是一个例子来说明问题。 当我不知道 a.someClass 的确切类型时,例如继承,我该怎么做?

您可以:

println("\(a.someClass!.dynamicType.category)")

与普通成员访问不同,.dynamicType 不会隐式解包 ImplicitlyUnwrappedOptional

在你的例子中,a.someClassImplicitlyUnwrappedOptional<SomeClass>,而 ImplicitlyUnwrappedOptional<T> 没有 .category 静态成员。

因此,您必须使用 a.someClass!

手动解包