web-dev-qa-db-ja.com

swiftでUIViewControllerのクラス名を取得

SwiftでUIViewControllerクラスのクラス名を取得する方法

Objective Cでは、次のようなことができます。

self.appDelegate = (shAppDelegate *)[[UIApplication sharedApplication] delegate];
    UIViewController *last_screen = self.appDelegate.popScreens.lastObject ;

    if(last_screen.class != self.navigationController.visibleViewController.class){

    //.......

}

しかしSwift私はこのようにしてみました

let appDelegate = UIApplication.sharedApplication().delegate as AppDelegate
    let last_screen = appDelegate.popScreens?.lastObject as UIViewController

これはできません。

if last_screen.class != self.navigationController.visibleViewController.class{

//....

}

UIViewControllerのクラスメソッド、つまり最後の画面

26
Qadir Hussain

クラス名を知るには、次のように呼び出すことができます。

var className = NSStringFromClass(yourClass.classForCoder)
49
juangdelvalle

クラスの名前を知る必要がない最もクリーンな方法は、このようなものです。

let name = String(describing: type(of: self))
22
cnotethegr8

Swift 3の簡単な方法は、以下のコードを書くことです:

インスタンスについて:

let className = String(describing: self)

クラス用:

let className = String(describing: YourViewController.self)
21
prabhu

Juangdelvalleの answer を展開します。

これを拡張機能として追加したので、再利用可能であり、任意のView Controllerから簡単に呼び出すことができます。また、場合によってはNSStringFromClass in Swiftは次のような形式の文字列を返します。

<プロジェクト名> .viewControllerClassName

この拡張プロパティは、プロジェクト名のプレフィックスを削除し、クラス名のみを返すように変更されます。

extension UIViewController {
    var className: String {
        return NSStringFromClass(self.classForCoder).componentsSeparatedByString(".").last!
    }
}
12
Isuru

スイフト4

HomeViewControllerという名前のクラスがあるとします。次に、次のコードでクラスの名前を取得できます。

_let class_name = "\(HomeViewController.classForCoder())"
_

classForCoder()メソッドは、ユーザーの文字列に変換するAnyClassオブジェクト(クラスの名前)を返します。

4
Naresh

Isuruの答えのSwift3バージョンを以下に示します。

extension UIViewController {
    var className: String {
        return NSStringFromClass(self.classForCoder).components(separatedBy: ".").last!;
    }
}
2
zingle-dingle

String.init(describing: self.classForCoder)を使用

例:

let viewControllerName = String.init(describing: self.classForCoder)
print("ViewController Name: \(viewControllerName)")

プロパティはSwiftではdynamicTypeと呼ばれます。

0
fluidsonic