Swift 2.2 AnyObject类型

时间:2016-03-23 20:48:13

标签: 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'

我正在进行swift.org中描述的更改,但我找不到答案。

2 个答案:

答案 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