J'ai une méthode statique dans Swift
class BaseAsyncTask: WebServiceClient {
class func execute(content : [String:AnyObject], cancelled:CustomBool)
{
// Print class name (BaseAsyncTask) here
}
}
Et je veux savoir comment obtenir le nom de classe dans cette méthode. j'ai essayé
self.dynamicType
mais cela donne une erreur (je suppose à cause de l'auto dans une fonction de classe)
Il existe différentes méthodes pour le faire, si votre méthode hérite de NSObject, vous pouvez l'exposer à objective-c et faire quelque chose comme ça.
@objc(BaseAsyncTask)
class BaseAsyncTask: WebServiceClient {
class func execute(content : [String:AnyObject], cancelled:CustomBool)
{
println("Class \(NSStringFromClass(self))")
}
}
Pour une pure Swift vérification de l'introspection ici sur MirrorType
J'ai également trouvé cette extension de crédits à 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!
}
}
[Xcode 8]
Alex m'a suggéré que dans la version Xcode 8, ce code affiche un avertissement. Pour éviter cela, nous devons préfixer la méthode comme ça:
@nonobjc class var className: String{
return NSStringFromClass(self).components(separatedBy: ".").last!
}
Vous pouvez utiliser l'interpolation de chaînes pour afficher self
:
let className = "\(self)"
Exemple de code:
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"
Une autre façon de le faire, lorsque vous n'avez pas d'instance de classe, est la suivante.
Swift 4
print(String(describing:BaseAsyncTask.self))
Swift 2
print(String(BaseAsyncTask))
Inspiré ici.
Obtenir le nom de classe de l'objet sous forme de chaîne dans Swift