在更新iOS 9.3和Swift 2.2的新更新后(至少在Xcode更新中有所说明),下面的代码不再适用于我。
if context[indexPath.row].dynamicType.className() == "MyClass"
它抛出一个异常,表明:
Value of type 'AnyObject.Type' has no member 'className'
我正在进行swift.org中描述的更改,但我找不到答案。
答案 0 :(得分:3)
如果在类型系统中拥有真正的编译器支持,为什么还要使用Strings呢?我建议改为:
if context[indexPath.row].dynamicType == MyClass.Type.self {
// ...
}
此外,你的意思很可能是:
if let cell = context[indexPath.row] as? MyClass {
// ...
}
除非您打算永远删除派生类。
答案 1 :(得分:1)
我不知道lvl5
做了什么。这不是className()
上已知的方法。
有几种方法可以解决这个问题。
使用AnyClass
获取类名的字符串描述:
description()
或者,如果您使用的是Objective-C类型,则可以使用if context[indexPath.row].dynamicType.description() == "MyClass" {
// ...
}
从字符串返回NSClassFromString
:
AnyClass
斯威夫特3:
if context[indexPath.row].dynamicType == NSClassFromString("MyClass") {
// ...
}
已重命名为dynamicType
。用法:
type(of:)
或
type(of: context[indexPath.row]) == MyClass.self