如何执行从NSClassFromString转换的类的类方法?

时间:2016-08-12 13:27:04

标签: ios objective-c swift casting

我尝试使用从 NSClassFromString 创建的类来执行类方法,但是我失败了。

在Objective-C中,它很简单:

{{1}}

在Swift中,这并不容易:

{{1}}

到目前为止,我的Swift代码中显示的错误是:
 1.'#selector'的争论并不是指' @ objc'方法,属性或初始化程序  2. Stastic member' cellType'不能用于类型' CTFeedbackCellItem'的实例。

1 个答案:

答案 0 :(得分:2)

试试这个:

override init(style: UITableViewCellStyle, reuseIdentifier: String?) {
    guard let reuseIdentifier = reuseIdentifier else {
        fatalError("bad usage")
    }
    guard let itemClass = NSClassFromString(reuseIdentifier) as? CTFeedbackCellItem.Type else {
        fatalError("bad reuseIdentifier")
    }
    super.init(style: itemClass.cellStyle(), reuseIdentifier: reuseIdentifier)
}

(如果您已将cellStyle作为类属性实施,请将itemClass.cellStyle()更改为itemClass.cellStyle。)

类对象不是类的实例,因此不应该像实例一样强制转换它。如果要调用类方法,则将其强制转换为元类。无需使用#selector