Osc*_*uez 18 static class function ios swift
我在Swift中有一个静态方法
class BaseAsyncTask: WebServiceClient {
class func execute(content : [String:AnyObject], cancelled:CustomBool)
{
// Print class name (BaseAsyncTask) here
}
}
Run Code Online (Sandbox Code Playgroud)
我想知道如何在该方法中获取类名.我试过了
self.dynamicType
Run Code Online (Sandbox Code Playgroud)
但这会产生错误(我想因为类函数中的self)
And*_*rea 13
有不同的方法可以做到这一点,如果你的方法继承自NSObject,你可以将它暴露给objective-c并做类似的事情.
@objc(BaseAsyncTask)
class BaseAsyncTask: WebServiceClient {
class func execute(content : [String:AnyObject], cancelled:CustomBool)
{
println("Class \(NSStringFromClass(self))")
}
}
Run Code Online (Sandbox Code Playgroud)
对于纯SWIFT内省,请在此处查看MirrorType
我也发现了这个扩展名为ImpactZero
public extension NSObject{
public class var nameOfClass: String{
return NSStringFromClass(self).components(separatedBy: ".").last!
}
public var nameOfClass: String{
return NSStringFromClass(type(of: self)).components(separatedBy: ".").last!
}
}
Run Code Online (Sandbox Code Playgroud)
[Xcode 8]
Alex建议我在Xcode 8版本中显示警告.为避免这种情况,我们应该为方法添加前缀:
@nonobjc class var className: String{
return NSStringFromClass(self).components(separatedBy: ".").last!
}
Run Code Online (Sandbox Code Playgroud)
Ant*_*nio 10
您可以使用字符串插值来打印self
:
let className = "\(self)"
Run Code Online (Sandbox Code Playgroud)
示例代码:
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"
Run Code Online (Sandbox Code Playgroud)
另一种方法是,当你没有这个类的实例时就是这样.
斯威夫特4
print(String(describing:BaseAsyncTask.self))
Run Code Online (Sandbox Code Playgroud)
斯威夫特2
print(String(BaseAsyncTask))
Run Code Online (Sandbox Code Playgroud)
灵感来自这里.
归档时间: |
|
查看次数: |
13479 次 |
最近记录: |