Post on 28-Jan-2021
II. Aspectos Esenciales de Swift
Aspectos esenciales de Swift Tipos básicos
• Utilice let para utilizar una constante y var para utilizar una variable.
• Todas las constantes y variables en Swift tienen tipo, pero no es necesario especificarlo. Al proporcionar un valor al momento de la creación, se permite al compilador inferir el tipo.
Aspectos esenciales de Swift Tipos básicos
• Si el valor inicial no provee suficiente información (o si no hay valor inicial), especifique el tipo escribiéndolo después de la variable, separado por dos puntos (:).
Aspectos esenciales de Swift Tipos básicos
• Los valores nunca se convierten a otro tipo de manera implícita. Si necesita convertir un valor a un diferente tipo, debe hacer una instancia del tipo deseado explícitamente.
Aspectos esenciales de Swift Tipos básicos
• Hay una manera más simple de incluir valores en una cadena: Escriba el valor entre paréntesis y anteponga una barra (\).
• A esto se le llama interpolación de cadena (string interpolation).
Aspectos esenciales de Swift Tipos básicos
• Utilice opcionales para trabajar con valores que pueden ser omitidos.
• Un valor opcional contiene un valor o contiene nil para indicar que el valor se omitió.
• Para marcar un valor como opcional se coloca un signo de interrogación (?) después del tipo.
• Para obtener el valor de un opcional, se desenvuelve utilizando el operador de desenvoltura (!).
Aspectos esenciales de Swift Tipos básicos
• Los opcionales son pervasivos en Swift, y son muy útiles en situaciones donde un valor puede o no estar presente. Por ejemplo en la conversión de tipos.
Aspectos esenciales de Swift Tipos básicos
• Un opcional implícitamente desenvuelto es un opcional que también puede ser utilizado como un valor no opcional, sin necesidad de desenvolver su valor cada vez que se accede.
• Es muy rara la necesidad de crear un opcional implícitamente desenvuelto en tu propio código. Más bien, se utilizan para rastrear la conexión entre la interfaz de usuario y el código fuente.
Aspectos esenciales de Swift Tipos básicos
• Un arreglo es un tipo de dato que sigue la pista a una colección de elementos ordenados.
• Para crear un arreglo se utilizan los corchetes ([]) y se accede a sus elementos escribiendo el índice dentro de los corchetes.
• Para crear un arreglo vacío, se utiliza la sintaxis de inicializador.
Aspectos esenciales de Swift Flujo de control
• Swift tiene 2 tipos de enunciados para el flujo de control.
• Los enunciados condicionales, como if y switch, verifican si una condición es verdadera (valor Boolean true) antes de ejecutar una pieza de código.
• Los ciclos, como for-in y while, ejecutan la misma pieza de código muchas veces.
Aspectos esenciales de Swift Flujo de control
• Los enunciados pueden anidarse para crear comportamiento más complejo en el programa.
Aspectos esenciales de Swift Flujo de control
• Utilice atado opcional (optional binding) en un enunciado if para verificar si un opcional contiene un valor.
• Si el valor opcional es nil, el condicional es falso y se saltará el código entre llaves. De otra manera, el valor opcional será desenvuelto y asignado.
Aspectos esenciales de Swift Flujo de control
• Se puede utilizar un sólo enunciado if para atar varios valores.
• El enunciado if se ejecuta solamente si todos los atados son exitosos.
• Se puede agregar una clausula where para detallar más el condicional.
Aspectos esenciales de Swift Flujo de control
• Un enunciado switch permite utilizar cualquier tipo de dato y una variedad de operaciones de comparación. En el ejemplo, el switch conmuta entre los valores de la cadena, comparando el valor con cada caso y ejecutando el correspondiente.
Aspectos esenciales de Swift Flujo de control
• Se puede mantener un índice en un ciclo utilizando un rango.
• Se puede utilizar el operador de rango medio abierto (..
Aspectos esenciales de Swift Funciones y métodos
• Un función es una pieza de código reutilizable, con un nombre que puede ser referida desde cualquier parte de un programa.
• Utilice func para declarar una función.
• La declaración de una función puede incluir cero o más parámetros, escritos como nombre: Tipo.
• Opcionalmente, una función puede tener un tipo de retorno, escrito después de ->, lo cual indica lo que la función regresa como resultado.
• La implementación de la función va dentro de un par de llaves ({}).
Aspectos esenciales de Swift Funciones y métodos
• Invoque una función escribiendo su nombre con una lista de argumentos entre paréntesis.
• Al invocar una función, se pasa el valor del primer argumento sin su nombre y cada valor subsecuente con su nombre.
Aspectos esenciales de Swift Funciones y métodos
• Como se puede notar, para invocar un método se utiliza la sintaxis del punto.
• Al invocar un método, se pasa el valor del primer argumento sin su nombre y cada valor subsecuente con su nombre.
Aspectos esenciales de Swift Clases e inicializadores
• En la programación orientada a objetos, el comportamiento de un programa se basa en interacciones entre objetos. Un objeto es una instancia de una clase.
• Las clases almacenan información adicional a cerca de ellas como propiedades y definen su comportamiento como métodos.
• Utilice la palabra class seguida del nombre de la clases para definir una clase.
• Las propiedades se declaran igual que las variables o constantes y los métodos se declaran igual que las funciones.
Aspectos esenciales de Swift Clases e inicializadores
• Para crea una instancia de una clase (un objeto) se deben colocar paréntesis después del nombre de la clase.
• Utilice la sintaxis de punto para acceder a las propiedades y métodos de la instancia.
Aspectos esenciales de Swift Clases e inicializadores
• La clase Shape carece de una cosa importante: un inicializador.
• Un inicializador es un método que prepara la instancia de la clase para su uso, lo cual involucra asignar un valor inicial a cada propiedad y algunos otros ajustes iniciales.
Aspectos esenciales de Swift Clases e inicializadores
• La palabra self se utiliza para distinguir las propiedades de los argumentos del inicializador.
• Cada propiedad necesita tener un valor asignado, ya sea en su declaración o en el inicializador.
• Para invocar un inicializador no se escribe init, se invoca colocando paréntesis con los argumentos apropiados después del nombre de la clase.
Aspectos esenciales de Swift Clases e inicializadores
• Las clases heredan su comportamiento de sus clases padre.
• Una clase que hereda comportamiento de otra clase se llama subclase de esa clase y la clase padre se llama superclase.
• Las subclases incluyen el nombre de su superclase después de su nombre, separado por dos puntos.
• Una clase puede heredar de sólo una superclase, pero esa superclase puede heredar de otra, formando una jerarquía de clases.
• Los métodos de una subclase que sobreescriben métodos de la superclase se deben marcar con la palabra override.
Aspectos esenciales de Swift Clases e inicializadores
• Note que el inicializador para la clase Square tiene 3 pasos:
• Asignación de valores a las propiedades que declara la subclase (Square).
• Invocación al inicializador de la superclase.
• Cambio de los valores de las propiedades definidas en la superclase (NamedShape).
Aspectos esenciales de Swift Clases e inicializadores
• Algunas veces la inicialización de un objeto debe fallar, por ejemplo cuando los valores provistos como argumentos están fuera de cierto rango, o cuando faltan datos.
• Los inicializadores que pueden fallar al inicializar un objeto se llaman inicializadores fallables (failable initializer) y pueden regresar nil después de la inicialización.
• Utilice init? para declarar un inicializador fallable.
Aspectos esenciales de Swift Clases e inicializadores
• Los inicializadores pueden tener un número de palabras asociadas.
• Un inicializador designado no requiere ninguna palabra. Este inicializador actúa como uno de los inicializadores primarios de una clase.
• La palabra convenience después de un inicializador indica que es un inicializador de conveniencia, el cual es un inicializador secundario que pude agregar comportamiento adicional o personalización, pero enventualmente debe invocar a un inicializador designado.
• La palabra required después de un inicializador indica que cualquier subclase debe implementar su propia versión del inicializador.
Aspectos esenciales de Swift Clases e inicializadores
• La conversión de tipos (type cast) es una manera de verificar el tipo de una instancia y tratarla se manera distinta dependiendo de su lugar en la jerarquía de clases.
• Una constante o variable de una cierta clase puede referirse a una instancia de una subclase. cuando se crea que este es el caso, se puede tratar de convertir a la subclase (downcast) a través del operador de conversión de tipos.
• Dado que la conversión puede fallar, el operador de conversión de tipos viene en 2 formas. La forma opcional as? y la forma forzada as!.
• Utilice el operador de conversión de tipos opcional (as?) cuando no esté seguro si la conversión será exitosa.
• Utilice el operador de conversión de tipos forzada (as!) cuando esté seguro que la conversión será exitosa.
Aspectos esenciales de Swift Clases e inicializadores
• El ejemplo muestra el uso del operador de conversión de tipos opcional (as?) para verificar si una figura (Shape) en un arreglo de figuras es un cuadrado (Square) o triángulo (Triangle).
• Se incrementa la cuenta de objetos de tipo Square y Triangle cada vez que se encuentra la figura correspondiente. Al final se imprimen las cuentas.
Aspectos esenciales de Swift Enumeraciones y estructuras
• Las clases no son la única manera de definir tipos de datos en Swift.
• Las enumeraciones y las estructuras tienen capacidades similares que las clases, pero pueden ser útiles en diferentes contextos.
• Las enumeraciones definen un tipo común para un grupo de valores relacionados y permiten trabajar con esos valores de manera segura.
• Las enumeraciones pueden tener métodos asociados.
• Utilice la palabra enum para crear una enumeración.
Aspectos esenciales de Swift Enumeraciones y estructuras
• En el ejemplo anterior, el tipo del valor crudo (raw-value) de la enumeración es Int, de tal forma que se debe especificar sólo el primer valor crudo, el resto se asignan en orden.
• Para acceder al valor crudo de un miembro de la enumeración se puede utilizar la propiedad rawValue.
• Utilice el inicializador init?(rawValue:) para crear una instancia de una enumeración a partir de un valor crudo.
Aspectos esenciales de Swift Enumeraciones y estructuras
• Los valores de los miembros de una enumeración son valores por si mismos, no solamente otra manera de escribir sus valores crudos.
• De hecho, en casos donde no existe un valor crudo significativo, no es necesario proveer uno.
Aspectos esenciales de Swift Enumeraciones y estructuras
• Las estructuras permiten muchos de los mismos comportamientos de una clase, incluyendo métodos e inicializadores.
• Una de las diferencias más importantes es que las estructuras siempre se copian cuando se pasan entre el código y las clases son pasadas por referencia.
• Las estructuras son ideales para definir tipos de datos ligeros que no necesitan capacidades como herencia y conversión de tipos.
• Utilice la palabra struct para crear una estructura.
Aspectos esenciales de Swift Protocolos
• Un protocolo define una plantilla de métodos, propiedades y otros requisitos que se ajustan a una tarea en particular o pedazo de funcionalidad.
• El protocolo no provee una implementación de ninguno de los métodos, sólo describe como lucirá la implementación.
• El protocolo puede ser adoptado por una clase, estructura o enumeración para proveer una implementación de esos requisitos.
• Cualquier tipo que satisfaga los requisitos de un protocolo se dice que conforma al protocolo.
• Utilice la palabra protocol para declara un protocolo.
Aspectos esenciales de Swift Protocolos
• Los protocolos pueden requerir que los tipos que los adoptan tengan propiedades de instancia, métodos de instancia, métodos de tipo, operadores y subscripts específicos.
• Las clases, estructuras y enumeraciones adoptan un protocolo listando su nombre después del nombre de la clase (estructura o enumeración), separada por dos puntos.
• Un tipo puede adoptar cualquier cantidad de protocolos, los cuales aparecen en una lista separados por comas.
• Si una clase tiene superclase, el nombre de esta debe aparecer primero en la lista, seguido de los protocolos.
Aspectos esenciales de Swift Protocolos
• Los protocolos son tipos de primera clase, lo que significa que pueden ser tratados como otros tipos con nombre.
• Por ejemplo, se puede crear un arreglo de ExampleProtocol e invocar al método adjust() sobre cada instancia en el arreglo.
Aspectos esenciales de Swift Swift y Cocoa Touch
• Swift es diseñado para proveer operación transparente con Cocoa Touch, el conjunto de frameworks de Apple que se utilizan para desarrollar aplicaciones para iOS.
• Hasta ahora, se ha trabajado sólo con tipos de datos de la biblioteca estándar de Swift.
• La biblioteca estándar de Swift es un conjunto de tipos de datos diseñadas para Swift e incluidas en el lenguaje.
• Los tipos como String y Array son ejemplos de tipos incluidos en la biblioteca estándar.
• Cuando se escriben aplicaciones iOS, se utilizan más que la biblioteca estándar de Swift.
• Uno de los frameworks más utilizados en el desarrollo iOS es UIKit.
• UIKit contiene clases útiles para trabajar con la capa de interfaz de usuario de la aplicación.
• Para acceder a UIKit, simplemente se debe importar como un módulo en cualquier archivo Swift.
• Después de importar UIKit, se puede utilizar la sintaxis de Swift con los tipos de UIKit.
Aspectos esenciales de Swift Swift y Cocoa Touch