mcfly soft
mcfly soft

Reputation: 11645

howto determine the class when i get a NSObject in a function with swift

I have a function like this, which I can provide 2 different classes (MyClass1 or 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 ?

I would like to get the Classname of an provided object. Howto do that in swift ? I would like to provide my Class myclass to the func getClassName(anyobject: NSObject) and get the result "MyClass1".

Upvotes: 0

Views: 65

Answers (2)

Hideyasu.T
Hideyasu.T

Reputation: 875

If use static var ,you don't need to make instance.

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

For example in 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)
        }

Upvotes: 0

B B
B B

Reputation: 1950

Add this extension

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)

Let me know if this is what you asked for.

Upvotes: 1

Related Questions