在Swift 4中访问AnyClass变量上的Class var

时间:2017-09-18 16:17:49

标签: swift metatype

在Swift 3.2中,这个(let id = row.tableViewCellClass?.reuseIdentifier)起作用了:

class DrillDownTableViewCell {
    class var reuseIdentifier: String
    {
        return String(describing: self)
    }
}

class RowViewModel: NSObject
{
    var tableViewCellClass: AnyClass?
}

class Foo {
    var row : RowViewModel?
    func setup() {
        row = RowViewModel()
        row?.Class = DrillDownTableViewCell.self
    }

    func doThings()  {
        let id = row?.tableViewCellClass?.reuseIdentifier
    }
}

在我的Swift 4更新后,它显示了"实例成员' reuseIdentifier'不能在类型' AnyObject'。

上使用

如何访问类的哪个元类信息存储在AnyClass变量中?

1 个答案:

答案 0 :(得分:0)

(我假设你的意思是在? row之后doThings()。我认为这是一个错字而不是问题的一部分。还有其他几个?在这里缺席以及其他一些我不会深入研究的错别字。)

如果您希望tableViewCellClass拥有reuseIdentifier类属性,则它不属于AnyClass类型。有许多类没有该属性。您需要符合协议的类:

protocol Identifiying {
    static var reuseIdentifier: String { get }
}

因此,您的模型需要Identifying类:

class RowViewModel: NSObject {
    var tableViewCellClass: Identifiying.Type?
}

然后你可以按照预期使用它。