2014-10-23 6 views
3

저는 Swift 프로그래밍에서 큰 문제가 있습니다. 부모로부터 자식 클래스의 이름을 얻으려고합니다. 이것은 내가 무엇을 원하는 샘플 예입니다부모로부터 자식 클래스 가져 오기

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

class Mother: Parent { 

} 

class Father: Parent { 

} 

Mother.sayHello() 
Father.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() 

답변

4

당신은이 같은 기능을 사용할 수 있습니다 :

func getRawClassName(object: AnyClass) -> String { 
    let name = NSStringFromClass(object) 
    let components = name.componentsSeparatedByString(".") 
    return components.last ?? "Unknown" 
} 

클래스의 인스턴스를 취하고 유형 이름을 얻을

+1

그냥 많이 감사합니다. 나는 너무 멀지 않았다. – user2724028

0

당신은 당신의 아이 클래스에 sayHello 함수를 재정의해야 NSStringFromClass을 사용하십시오.

그러나 형식 이름에는 네임 스페이스가 포함되어 있으므로 구분 기호로 도트를 사용하여 배열로 분할됩니다. 실제 클래스 이름은 반환 된 배열의 마지막 항목입니다.

class Parent { 
    class func sayHello() { 
     println("hi \(getRawClassName(self))") 
    } 
} 

을하고 실제 상속 클래스 I이 트릭을 알고

+0

의 이름을 인쇄 할 수 있지만, 가능하다면 내가 부모 클래스에서 원하는 :

다음과 같이 사용할 수 있습니다. – user2724028

+0

하위 클래스는 상위 클래스를 알고 있지만 상위 클래스는 하위 클래스에 대해 아무것도 모릅니다. 하지만 _instance_가 어떤 유형인지 항상 확인할 수 있습니다. – zisoft

+0

도움을 주셔서 감사합니다. 꽤 어렵습니다. 불가능하다고 생각합니다. 해결책은 매개 변수로 클래스를 전달하는 것입니다. class func sayHello (클래스 : AnyClass) – user2724028

관련 문제