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
のクラスメソッド、つまり最後の画面
クラス名を知るには、次のように呼び出すことができます。
var className = NSStringFromClass(yourClass.classForCoder)
クラスの名前を知る必要がない最もクリーンな方法は、このようなものです。
let name = String(describing: type(of: self))
Swift 3の簡単な方法は、以下のコードを書くことです:
インスタンスについて:
let className = String(describing: self)
クラス用:
let className = String(describing: YourViewController.self)
Juangdelvalleの answer を展開します。
これを拡張機能として追加したので、再利用可能であり、任意のView Controllerから簡単に呼び出すことができます。また、場合によってはNSStringFromClass
in Swiftは次のような形式の文字列を返します。
<プロジェクト名> .viewControllerClassName。
この拡張プロパティは、プロジェクト名のプレフィックスを削除し、クラス名のみを返すように変更されます。
extension UIViewController {
var className: String {
return NSStringFromClass(self.classForCoder).componentsSeparatedByString(".").last!
}
}
スイフト4
HomeViewController
という名前のクラスがあるとします。次に、次のコードでクラスの名前を取得できます。
_let class_name = "\(HomeViewController.classForCoder())"
_
classForCoder()
メソッドは、ユーザーの文字列に変換するAnyClass
オブジェクト(クラスの名前)を返します。
Isuruの答えのSwift3バージョンを以下に示します。
extension UIViewController {
var className: String {
return NSStringFromClass(self.classForCoder).components(separatedBy: ".").last!;
}
}
String.init(describing: self.classForCoder)
を使用
例:
let viewControllerName = String.init(describing: self.classForCoder)
print("ViewController Name: \(viewControllerName)")
プロパティはSwiftではdynamicType
と呼ばれます。