在"类func"中获取Swift类名方法

时间:2015-08-04 02:15:00

标签: ios swift function class static

我在Swift中有一个静态方法

class BaseAsyncTask: WebServiceClient {
      class func execute(content : [String:AnyObject], cancelled:CustomBool)
      {
            // Print class name (BaseAsyncTask) here
      }
}

我想知道如何在该方法中获取类名。我试过了

self.dynamicType

但是这会产生错误(我想是因为类函数中的self)

3 个答案:

答案 0 :(得分:13)

有不同的方法可以做到这一点,如果你的方法继承自NSObject,你可以将它暴露给objective-c并做类似的事情。




  @ objc(BaseAsyncTask)

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




对于纯SWIFT内省,请查看 MirrorType





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


&#XA ;
 公共扩展名NSObject {
 public class var nameOfClass:String {
返回NSStringFromClass(s​​elf).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(s​​elf).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))

受到启发。

Get class name of object as string in Swift