在超类中使用className()来获取Realm中子类的名称

时间:2017-05-11 16:38:07

标签: swift realm

我在Realm中有一个名为Object的{​​{1}}子类,而BrowserCategoryArtistDecadeGenre的子类。< / p>

现在BrowserCategory的每个子类都有BrowserCategory属性LinkingObject

songs

(例如,对于let songs = LinkingObjects(fromType: Song.self, property: "decade") 子类)

我想在Decade基类中写这个,所以我试过这个:

BrowserCategory

但是这会返回基类名而不是子类名,从而产生以下错误:

var songs = LinkingObjects(fromType: Song.self, property: className().lowercased())

有没有办法以我想要的方式做到这一点?

1 个答案:

答案 0 :(得分:0)

您可能正在寻找type(of:self),这是多态的,正如此演示所示:

class BrowserCategory {
    func className() -> String {
        return String(describing:type(of:self))
    }
}
class Artist : BrowserCategory {}
class Decade : BrowserCategory {}
class Genre : BrowserCategory {}

let a = Artist()
a.className() // "Artist"
但是,我应该提醒你,要求将一个班级的名字作为一个字符串是一件非常奇怪的事情。使用类类型作为类型更常见。