[英]Get class name of UIViewController in swift
如何在 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){
//.......
}
但在斯威夫特我試過:
let appDelegate = UIApplication.sharedApplication().delegate as AppDelegate
let last_screen = appDelegate.popScreens?.lastObject as UIViewController
不能這樣做。
if last_screen.class != self.navigationController.visibleViewController.class {
//....
}
沒有UIViewController
的class
方法,即最后一個屏幕
要知道您的班級名稱,您可以這樣稱呼:
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 的答案。
我將其添加為擴展,以便它可以重用並且更容易從任何視圖控制器調用。 同樣在某些情況下,Swift 中的NSStringFromClass
返回格式如下的字符串:
<項目名稱>.viewControllerClassName 。
修改此擴展屬性以擺脫項目名稱前綴並僅返回類名稱。
extension UIViewController {
var className: String {
NSStringFromClass(self.classForCoder).components(separatedBy: ".").last!
}
}
斯威夫特 4
假設我們有一個名為HomeViewController
的類。 然后您可以使用以下代碼獲取類的名稱:
let class_name = "\(HomeViewController.classForCoder())"
classForCoder()
方法返回AnyClass
對象(您的類的名稱),我們將其轉換為用戶的字符串。
這是 isuru 答案的 swift3 版本。
extension UIViewController {
var className: String {
return NSStringFromClass(self.classForCoder).components(separatedBy: ".").last!;
}
}
斯威夫特 5 解決方案:
extension NSObject {
var className: String {
return String(describing: type(of: self))
}
class var className: String {
return String(describing: self)
}
}
用法:
class TextFieldCell: UITableVIewCell {
}
class LoginViewController: UIViewController {
let cellClassName = TextFieldCell.className
}
該屬性在 Swift 中稱為dynamicType
。
使用String.init(describing: self.classForCoder)
例子:
let viewControllerName = String.init(describing: self.classForCoder)
print("ViewController Name: \(viewControllerName)")
怎么樣:
extension NSObject {
static var stringFromType: String? {
return NSStringFromClass(self).components(separatedBy: ".").last
}
var stringFromInstance: String? {
return NSStringFromClass(type(of: self)).components(separatedBy: ".").last
}
}
我們也可以這樣做: Swift 5.1 中的String(describing: Self.self)
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.