Ios Swift 2.2任何对象类型
在iOS 9.3的更新和Swift 2.2的新更新之后(至少在Xcode更新更改中说明了这一点),下面的代码不再适用于我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上的
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
(使用反射等)的显式引用,这将不起作用。但是,是的,这会更干净,因为它会删除字符串。