En este nuevo Tutorial Swift aprenderemos acerca de los métodos de instancia y de tipo. Los métodos son funciones que están asociadas con un tipo en particular. Las clases, estructuras y enumeraciones, todas, pueden definir métodos de instancia, que encapsulan tareas y funciones específicas para trabajar con una instancia de un tipo dado. Las clases, estructuras y enumeraciones también pueden definir métodos de tipo, que se asocian con el tipo en sí.

Se que no suena del todo claro lo antes dicho, así que permítanme intentar desarrollar mejor estas ideas a base de ejemplos.

Métodos de instancia

Los métodos de instancia son funciones que pertenecen a instancias de una clase, estructura o enumeración, estas aportan la funcionalidad de las instancias, ya sea proporcionando formas de acceder y modificar las propiedades, o proporcionando funcionalidad relacionada con el propósito de la instancia. Ejemplo:

…en este código hemos creado la clase Counter, tres métodos de instancia y una propiedad. Más allá de que se les llama métodos de instancia en lugar de funciones, nada de esto es nuevo, ya lo hemos visto en otros artículos de este Curso Swift.

La propiedad self

Cada instancia cuenta con una propiedad implícita llamada self, que es exactamente equivalente a la propia instancia. Utilizamos la propiedad self para hacer referencia a la instancia actual dentro de sus propios métodos de instancia, self vendría a ser como el this de C++ o Java.

El método increment() en el ejemplo anterior se podría haber escrito así:

…escribir self en este caso no es necesario ya que el compilador asume que se está haciendo referencia a una propiedad de la clase donde se encuentra este método de instancia.

Modificación de tipos por valores

Las estructuras, las enumeraciones y las tuplas son tipos por valor o Value Types en ingles. Sin entrar en muchos detalles (este tema lo tocaremos en otro Curso Swift) digamos que esto significa que almacenan una copia única de los datos que engloban y como es de esperar estas características establecen ciertas particularidades en estos tipos. Veamos un ejemplo de esto:

…la salida en pantalla sería:

De las línea 5 a la 23 tenemos la declaración de la clase Crane, la estructura DataStruct y la enumeración BoomLevel. Luego de la línea 27 a la 51 hacemos uso de estas, creamos instancias de las mismas, las inicializamos y le asignamos un valor, terminamos por imprimir en pantalla los valores añadidos.

Hasta aquí todo bien, las tres instancias fueron declaradas como variables, pero ¿qué sucedería si tuviéramos métodos de instancia y estos modificaran el valor de las instancias a las que pertenecen? Aquí algunos cambios:

…la salida en pantalla sería:

…exactamente, hay errores en el código debido a una características propia del lenguaje como lo es el hecho de que ningún método de instancia de una estructura o enumeración puede modificar una propiedad miembro de las mismas, algo que si podemos lograr en una clase. Sin embargo tampoco es imposible de lograr, para ello necesitamos hacer uso de la palabra clave mutating en conjunto a la declaración de cada método de instancia. El código anterior ya corregido quedaría de la siguiente forma:

…la salida sería:

…problema resuelto.

Métodos de tipo

Los métodos de instancia, como se describió anteriormente, son métodos que se llaman en una instancia de un tipo particular. Pues también podemos definir métodos de tipo que es como se les llama en Switch a los métodos estáticos de toda la vida. Al igual que en otros lenguajes de programación estos se declaran escribiendo la palabra clave static antes de la palabra clave func.

Un ejemplo podría ser:

…esto es válido tanto para las clases como para las estructuras y las enumeraciones.

Terminemos este tema con el siguiente ejemplo, donde veremos varios de los tópicos tocados en este artículo:

…la salida en pantalla sería:

Cualquier duda con este ejemplo, dejen sus preguntas en los comentarios!

Espero que todo cuanto se ha dicho aquí, de una forma u otra le haya servido de aprendizaje, de referencia, que haya valido su preciado tiempo.

Este artículo, al igual que el resto, será revisado con cierta frecuencia en pos de mantener un contenido de calidad y actualizado.

Cualquier sugerencia, ya sea errores a corregir, información o ejemplos a añadir será, más que bienvenida, necesaria!