ios - objetos - Métodos de tipo de llamada dentro de un método de instancia
que es self en swift (2)
En Swift 3 puedes usar:
let me = type(of: self)
me.staticMethod()
Apple tiene una buena explicación de los métodos tipo (clase) Here .
Sin embargo, su ejemplo se ve así:
class SomeClass {
class func someTypeMethod() {
// type method implementation goes here
}
}
SomeClass.typeMethod()
Veo este mismo ejemplo exactamente repetido en todas partes.
Sin embargo, necesito llamar a mi Método Tipo desde una instancia de mi clase, y eso no parece calcular.
DEBO estar haciendo algo mal, pero noté que Apple todavía no es compatible con Class Properties :(. Me pregunto si iré a un pozo seco para obtener agua.
Esto es lo que he intentado (en un patio de recreo):
class ClassA
{
class func staticMethod() -> String { return "STATIC" }
func dynamicMethod() -> String { return "DYNAMIC" }
func callBoth() -> ( dynamicRet:String, staticRet:String )
{
var dynamicRet:String = self.dynamicMethod()
var staticRet:String = ""
// staticRet = self.class.staticMethod() // Nope
// staticRet = class.staticMethod() // No way, Jose
// staticRet = ClassA.staticMethod(self) // Uh-uh
// staticRet = ClassA.staticMethod(ClassA()) // Nah
// staticRet = self.staticMethod() // You is lame
// staticRet = .staticMethod() // You''re kidding, right?
// staticRet = this.staticMethod() // What, are you making this crap up?
// staticRet = staticMethod() // FAIL
return ( dynamicRet:dynamicRet, staticRet:staticRet )
}
}
let instance:ClassA = ClassA()
let test:( dynamicRet:String, staticRet:String ) = instance.callBoth()
¿Alguien tiene una pista para mí?
var staticRet:String = ClassA.staticMethod()
Esto funciona. No requiere ningún parámetro, por lo que no es necesario que ingrese ninguno. También puede obtener ClassA dinámicamente así:
Swift 2
var staticRet:String = self.dynamicType.staticMethod()
Swift 3
var staticRet:String = type(of:self).staticMethod()