我在Swift编程中遇到了很大的问题。我试图从父级获取子类的名称。这是一个示例,我想做的事情:
class Parent {
class func sayHello() {
let nameChildClass = //
println("hi \(nameChildClass)")
}
}
class Mother: Parent {
}
class Father: Parent {
}
Mother.sayHello()
Father.sayHello()
我知道还有其他方法,但我确实需要这样做。
答案 0 :(得分:5)
您可以使用以下功能:
func getRawClassName(object: AnyClass) -> String {
let name = NSStringFromClass(object)
let components = name.componentsSeparatedByString(".")
return components.last ?? "Unknown"
}
,它接受一个类的实例,并使用NSStringFromClass
获取类型名称。
但是类型名称包含命名空间,所以为了摆脱它被拆分成一个数组,使用点作为分隔符 - 实际的类名是返回数组的最后一项。
您可以按如下方式使用它:
class Parent {
class func sayHello() {
println("hi \(getRawClassName(self))")
}
}
,这将打印实际继承类的名称
答案 1 :(得分:0)
您必须覆盖子类中的sayHello
函数:
class Parent {
class func sayHello() {
println("base class")
}
}
class Mother: Parent {
override func sayHello() {
println("mother")
}
}
class Father: Parent {
override func sayHello() {
println("father")
}
}
mother = Mother()
father = Father()
mother.sayHello()
father.sayHello()
答案 2 :(得分:0)
来自 Swift 5.2
String(describing: Self.self)