我在Swift中有一个静态方法
class BaseAsyncTask: WebServiceClient {
class func execute(content : [String:AnyObject], cancelled:CustomBool)
{
// Print class name (BaseAsyncTask) here
}
}
我想知道如何在该方法中获取类名。我试过了
self.dynamicType
但是这会产生错误(我想是因为类函数中的self)
答案 0 :(得分:13)
有不同的方法可以做到这一点,如果你的方法继承自NSObject,你可以将它暴露给objective-c并做类似的事情。


 @ objc(BaseAsyncTask)

 class BaseAsyncTask:WebServiceClient {
 class func execute(content:[String:AnyObject],cancelled:CustomBool)
 {
 println(“Class \(NSStringFromClass(self))”)
 }
}



 对于纯SWIFT内省,请查看 MirrorType


我发现此扩展信用额度为 ImpactZero

&#XA ; 公共扩展名NSObject {
 public class var nameOfClass:String {
返回NSStringFromClass(self).components(separatedBy:“。”)。last!
 }

 public var nameOfClass:String {
返回NSStringFromClass(type(of:self))。components(separatedBy:“。”)。last!
 }
}



 [Xcode 8]

 Alex建议我在Xcode 8版本中,此代码显示警告。为了避免这种情况,我们应该为方法添加前缀:
@nonobjc class var className:String {
返回NSStringFromClass(self).components(separatedBy:“。”)。last!
}



答案 1 :(得分:10)
您可以使用字符串插值来打印self
:
let className = "\(self)"
示例代码:
class BaseAsyncTask: WebServiceClient {
class func execute(content : [String:AnyObject], cancelled: CustomBool)
{
let className = "\(self)"
print(className)
}
}
class AnotherAsyncTask : BaseAsyncTask {
}
BaseAsyncTask.execute([:], cancelled: true) // prints "BaseAsyncTask"
AnotherAsyncTask.execute([:], cancelled: true) // prints "AnotherAsyncTask"
答案 2 :(得分:6)
另一种方法,当你没有这个类的实例时就是这样。
Swift 4
print(String(describing:BaseAsyncTask.self))
Swift 2
print(String(BaseAsyncTask))
受到启发。