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.someClass
是 ImplicitlyUnwrappedOptional<SomeClass>
,而 ImplicitlyUnwrappedOptional<T>
没有 .category
静态成员。
因此,您必须使用 a.someClass!
手动解包
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.someClass
是 ImplicitlyUnwrappedOptional<SomeClass>
,而 ImplicitlyUnwrappedOptional<T>
没有 .category
静态成员。
因此,您必须使用 a.someClass!