Ios Swift 2.2任何对象类型

Ios Swift 2.2任何对象类型,ios,swift,xcode,swift2,Ios,Swift,Xcode,Swift2,在iOS 9.3的更新和Swift 2.2的新更新之后(至少在Xcode更新更改中说明了这一点),下面的代码不再适用于我 if context[indexPath.row].dynamicType.className() == "MyClass" 它抛出一个异常,该异常声明: Value of type 'AnyObject.Type' has no member 'className' 我正在查看中描述的更改,但找不到答案。我不知道className()做了什么。这不是AnyClass上的

在iOS 9.3的更新和Swift 2.2的新更新之后(至少在Xcode更新更改中说明了这一点),下面的代码不再适用于我

if context[indexPath.row].dynamicType.className() == "MyClass"
它抛出一个异常,该异常声明:

Value of type 'AnyObject.Type' has no member 'className'

我正在查看中描述的更改,但找不到答案。

我不知道
className()
做了什么。这不是
AnyClass
上的已知方法

有几种方法可以解决这个问题

使用
description()
获取类名的字符串描述:

if context[indexPath.row].dynamicType.description() == "MyClass" {
    // ...
}
或者,如果您使用的是Objective-C类型,则可以使用
NSClassFromString
从字符串返回
AnyClass

if context[indexPath.row].dynamicType == NSClassFromString("MyClass") {
    // ...
}
Swift 3:

dynamicType
已重命名为
type(of:)
。用法:

type(of: context[indexPath.row]) == MyClass.self


我不知道
className()
做什么。这不是
AnyClass
上的已知方法

有几种方法可以解决这个问题

使用
description()
获取类名的字符串描述:

if context[indexPath.row].dynamicType.description() == "MyClass" {
    // ...
}
或者,如果您使用的是Objective-C类型,则可以使用
NSClassFromString
从字符串返回
AnyClass

if context[indexPath.row].dynamicType == NSClassFromString("MyClass") {
    // ...
}
Swift 3:

dynamicType
已重命名为
type(of:)
。用法:

type(of: context[indexPath.row]) == MyClass.self


当类型系统本身具有真正的编译器支持时,为什么还要处理字符串呢?相反,我建议:

if context[indexPath.row].dynamicType == MyClass.Type.self {
    // ...
}
而且,很可能你的意思是:

if let cell = context[indexPath.row] as? MyClass {
    // ...
}

除非您打算永远删除派生类。

既然类型系统本身支持真正的编译器,为什么还要处理字符串呢?相反,我建议:

if context[indexPath.row].dynamicType == MyClass.Type.self {
    // ...
}
而且,很可能你的意思是:

if let cell = context[indexPath.row] as? MyClass {
    // ...
}

除非您打算永远删除派生类。

谢谢!我想确定这个对象是来自“MyClass”类型,还是不是。。。你得到了代码,但如果你不知道它在做什么,我不知道它为什么会工作:D我的对象类型是AnyObject:)谢谢!我想确定这个对象是来自“MyClass”类型,还是不是。。。你得到了代码,但如果你不知道它在做什么,我不知道它为什么会工作:D我的对象类型是AnyObject:)谢谢你的提示!:)如果您没有对
MyClass
(使用反射等)的显式引用,这将不起作用。但是,是的,这会更干净,因为它会删除字符串。谢谢提示!)如果您没有对
MyClass
(使用反射等)的显式引用,这将不起作用。但是,是的,这会更干净,因为它会删除字符串。