从父母那里获取子课程

时间:2014-10-23 10:10:05

标签: ios swift ios8

我在Swift编程中遇到了很大的问题。我试图从父级获取子类的名称。这是一个示例,我想做的事情:

class Parent {
  class func sayHello() {
      let nameChildClass = //
      println("hi \(nameChildClass)")
  }
}

class Mother: Parent {

}

class Father: Parent {

}

Mother.sayHello()
Father.sayHello()

我知道还有其他方法,但我确实需要这样做。

3 个答案:

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