当我在一个带有swift的函数中得到一个NSObject时,如何确定类

时间:2015-03-05 11:50:03

标签: swift

我有一个这样的函数,我可以提供2个不同的类(MyClass1或MyClass2):

   func getClassName(anyobject: NSObject) -> String {

        return anyobject.getClassName(); // <---- Howto do that ?

   }

   class MyClass1: NSObject {

   }


   class MyClass2: NSObject {

   }


var myclass:MyClass1;
var sClassName:String=getClassName(myclass); <---- Howto get that ?

我想获取提供的对象的Classname。如何在swift中做到这一点?我想将我的类myclass提供给func getClassName(anyobject:NSObject)并获得结果“MyClass1”。

2 个答案:

答案 0 :(得分:1)

添加此扩展程序

extension NSObject {
    var theClassName: String {
        return NSStringFromClass(self.dynamicType).componentsSeparatedByString(".").last!
    }
}

class MyClass1: NSObject{

}


class MyClass2: NSObject {

}


func getClassName(obj: NSObject) -> String {

    return obj.theClassName
}

var myClass: MyClass1 = MyClass1()
var sClassName: String = getClassName(myClass)

如果这是你要求的,请告诉我。

答案 1 :(得分:0)

如果使用静态var,则无需创建实例。

extension NSObject {
    static var className: String { String(describing: self) }
}

例如在StroyBoard中


 func changeWindow() {
        let vc: UIViewController!
        let storyboard = UIStoryboard(name: "Main", bundle: nil)
        if Auth.auth().currentUser?.uid != nil {

//here
            vc = storyboard.instantiateViewController(identifier: HomeViewController.className)
        }
        else {
            vc = storyboard.instantiateViewController(identifier: LoginViewController.className)
        }