Menú de navegaciónMenú
Categorías

La mejor forma de Aprender Programación online y en español www.campusmvp.es

?id=00d0d0c4-b991-4700-abba-141bc4ace516

Conceptos fundamentales del lenguaje Swift - Parte II

Swift_Logo

La semana pasada revisábamos algunos detalles fundamentales sobre la naturaleza del lenguaje Swift de Apple, viendo por ejemplo cómo se definían variables, constantes, enumeraciones, clases y cómo se manejaban las referencias.

Ahora vamos a continuar estudiando algunos detalles más que te ayudarán a saber algo más sobre su naturaleza, sobre todo si lo comparas con un lenguaje que ya conozcas.

Protocolos

Un protocolo es el equivalente en Swift a las interfaces de C# y Java. Es decir, un protocolo define un conjunto de métodos que luego una clase debe implementar. Cuando una clase implementa los métodos de un protocolo se dice que "conforma dicho protocolo".

Un aspecto a tener presente de los protocolos es que éstos pueden definir métodos opcionales, es decir, métodos que pueden, aunque no tienen por qué, ser implementados por las clases que conformen dichos protocolos.

Se pueden declarar referencias a protocolos y usar parámetros y valores de retorno de tipo protocolo.

Genéricos

Los genéricos son una de las novedades más destacadas de Swift respecto a Objective-C.

Si conoces este concepto de C# o Java, o bien estás familiarizado con las templates de C++ no te costará mucho entenderlo(aunque los genéricos de Swift tienen mucho más parecidos con los de C# o Java que con las templates).

Se llama genéricos a la posibilidad de pasar como un parámetro un tipo en lugar de un valor. Los genéricos permiten una mayor reutilización de código al poder reaprovechar un mismo código (una clase o un método) para que trabaje con varios tipos de datos distintos.

Inferencia de tipos

Swift es un lenguaje con tipado estático, es decir, las variables tienen un tipo establecido en tiempo de compilación. Pero si al declarar una variable le asignamos un valor inicial, el compilador puede inferir el tipo de la variable y no es necesario que lo indiquemos nosotros.

Así en Swift se puede hacer:

var message = "Hello world!"

Y el compilador asignará el tipo String a la variable message. Simplemente porque la expresión asignada ("Hello world!") es de tipo String.

Si queremos, podemos establecer el tipo de la variable pero es algo opcional:

var message : String = "Hello world!"

Ahora bien, la inferencia de tipos requiere que la variable se asigne a una expresión al declararse y no solo eso, requiere también que el compilador pueda determinar el tipo de la expresión asignada.

Es por ello que el siguiente código no compila:

var message  // Error: no se asigna expresión alguna a message por lo que el compilador no puede deducir el tipo

var message = nil  // Error: nil no tiene ningún tipo en concreto

En estos casos debemos especificar el tipo de la variable:

var message : String
var message : MyClass

Nota: Recuerda que la inferencia de tipos no convierte al lenguaje en dinámico, ni mucho menos. Una vez una variable tiene un tipo (explicitado por el desarrollador o inferido) lo mantiene para siempre y solo puede contener valores de este tipo.

Fecha de publicación:
Eduard Tomás Eduard es ingeniero informático y atesora muchos años de experiencia como desarrollador. Está especializado en el desarrollo de aplicaciones web y móviles. Mantiene un conocido blog sobre desarrollo en .NET en general y ASP.NET MVC en particular. Colabora con la comunidad impartiendo charlas en formato webcast y en eventos de distintos grupos de usuarios. Puedes seguirlo en Twitter en @eiximenis. Ver todos los posts de Eduard Tomás

¿Te ha gustado este post?
Pues espera a ver nuestra newsletter...

Suscríbete a la newsletter

La mejor formación online para desarrolladores como tú

Agregar comentario

Los datos anteriores se utilizarán exclusivamente para permitirte hacer el comentario y, si lo seleccionas, notificarte de nuevos comentarios en este artículo, pero no se procesarán ni se utilizarán para ningún otro propósito. Lee nuestra política de privacidad.