functions create ios swift function class static

ios - create - swift final class



Obtenga el nombre de la clase Swift en el método "class func" (3)

Tengo un método estático en Swift

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

Y quiero saber cómo obtener el nombre de la clase dentro de ese método. Lo intenté

self.dynamicType

pero eso da error (supongo que debido a uno mismo dentro de una función de clase)


Existen diferentes métodos para hacerlo, si su método se hereda de NSObject, puede exponerlo al objetivo-c y hacer algo así.

@objc(BaseAsyncTask) class BaseAsyncTask: WebServiceClient { class func execute(content : [String:AnyObject], cancelled:CustomBool) { println("Class /(NSStringFromClass(self))") } }

Para la introspección de SWIFT pura, consulte aquí sobre MirrorType

He encontrado también esta extensión de créditos para 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 me sugirió que en la versión Xcode 8 este código muestra una advertencia. Para evitar eso deberíamos prefijar el método así:

@nonobjc class var className: String{ return NSStringFromClass(self).components(separatedBy: ".").last! }



Puede utilizar la interpolación de cadenas para imprimir self :

let className = "/(self)"

Código de muestra:

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"