El libro "Swift. Conceptos básicos de desarrollo de aplicaciones para iOS, iPadOS y macOS. 5ta ed. complementado y revisado "

imagen Hola habrozhiteli! El lenguaje rápido es joven, crece, se desarrolla y cambia, aunque los enfoques básicos de programación y desarrollo ya se han formado. En la nueva quinta edición del libro, la primera parte del libro se revisó por completo, lo que hace que el conocimiento del lenguaje Swift sea más cómodo, y todo el texto se actualiza de acuerdo con las capacidades de Swift 5. Durante una larga y fructífera comunicación con los lectores, surgieron muchas ideas, gracias a las cuales la nueva edición se convirtió materiales educativos aún más útiles y ricos. Ahora no solo aprenderá Swift, sino que también obtendrá información inicial sobre los principios del desarrollo de aplicaciones completas. El mundo de Swift está en constante cambio, las personas con una gran cantidad de conocimiento y experiencia aún no existen debido a la edad del idioma, por lo que puede ser uno de los primeros especialistas.

Extracto Capítulo 6. Tuplas


Es posible que nunca haya encontrado un concepto como las tuplas en la programación, sin embargo, esta es una de las características muy útiles disponibles en Swift. Las tuplas, por ejemplo, se pueden usar para trabajar con coordenadas. De acuerdo, es mucho más conveniente manejar una construcción (x, y, z) escrita en una variable que crear una variable separada para cada eje de coordenadas.

6.1. Conceptos básicos de tuplas


Una tupla es un objeto que agrupa valores de varios tipos dentro de un único valor compuesto.

Las tuplas son la forma más fácil en que Swift puede combinar valores de tipos arbitrarios. Cada valor individual en la tupla puede tener su propio tipo de datos, que no depende de otros de ninguna manera.

Literal de la caravana


Se puede crear una tupla utilizando el literal de tupla .

Sintaxis

(_1, _2, ..., _N) 

• valor: Cualquiera: el siguiente valor de un tipo de datos arbitrario, incluido en la tupla.

El literal de tupla devuelve el valor definido en él como una tupla. Un literal está rodeado de paréntesis y consta de un conjunto de valores independientes, separados por comas. El número de elementos puede ser arbitrario, pero no se recomienda usar más de siete.

NOTA

Más adelante en el texto habrá una gran cantidad de bloques de sintaxis. Describen cómo las construcciones en cuestión pueden usarse en programas reales. Antes de continuar con estos bloques, es necesario describir la estructura de este bloque, así como los elementos utilizados.

La primera línea siempre determinará directamente la sintaxis en sí que describe el uso de la construcción en el código del programa. En este caso, se pueden usar elementos condicionales (por ejemplo, valor_1, valor_2 y valor_N en la sintaxis anterior). Por lo general, se escriben en forma de texto para comprender su propósito.

Pueden seguir descripciones detalladas de elementos condicionales. En algunos casos, los elementos se pueden agrupar (como en la sintaxis anterior, donde en lugar de los elementos valor_1, valor_2, etc., se describe un valor de elemento, cuyos requisitos se aplican a todos los elementos con un nombre dado).

Después del nombre del elemento condicional, se puede indicar su tipo de datos. Además, si un valor específico de cierto tipo (por ejemplo, cadena, numérico, lógico, etc.) debe usarse como un elemento, entonces el tipo está separado por dos puntos (:). Sin embargo, si se puede usar una expresión como elemento (por ejemplo, a + bo r> 100), el tipo se indicará después del guión y el corchete angular que representa la flecha (->). Se puede definir como uno (por ejemplo, Int) y muchos tipos de datos (por ejemplo, Int, String).

La sintaxis anterior usa Any como puntero a un tipo de datos. Cualquiera significa cualquier tipo de datos. En el proceso de aprendizaje, encontrará más y más tipos que se pueden especificar en este bloque de sintaxis.

Puede seguir una descripción detallada de la sintaxis, así como un ejemplo de su uso.
Te aconsejo que marques esta página para que si es necesario
Siempre vuelve aquí.
Una tupla se almacena en variables y constantes de la misma manera que los valores de los tipos de datos fundamentales.
Sintaxis

 let  = (_1, _2, ..., _N) var  = (_1, _2, ..., _N) 

Declarando una variable y una constante e inicializándola con un literal de tupla que consta de N elementos como valor. Para escribir una tupla en una variable, debe usar la declaración var, y para escribir en una constante, debe usar la declaración let.
Considere el siguiente ejemplo. Declaramos una constante y la inicializamos con una tupla que consta de tres elementos de tipo: Int, String y Bool (Listado 6.1).

Listado 6.1

 let myProgramStatus = (200, "In Work", true) myProgramStatus // (.0 200, .1 "In Work", .2 true) 

En este ejemplo, myProgramStatus es una constante que contiene una tupla como un valor que describe el estado de un determinado programa y consta de tres elementos:

  • 200 - entero de tipo Int, código de estado del programa;
  • "En el trabajo": un literal de cadena de tipo String, una descripción textual del estado del programa;
  • verdadero: un valor lógico de tipo Bool, la capacidad de continuar la operación del programa.

Esta tupla agrupa los valores de tres tipos de datos diferentes dentro de una única constante inicializada.

Tipo de datos de tupla


Pero si una tupla agrupa los valores de varios tipos de datos en uno, ¿cuál es el tipo de datos de la tupla misma y el parámetro que almacena su valor?

Un tipo de datos de tupla es una secuencia fija y ordenada de nombres de tipos de datos para elementos de tupla.
Sintaxis

 (____1, ____2, ..., ____N) 

El tipo de datos está encerrado entre paréntesis, y los nombres de los elementos están separados por comas. El orden de los nombres de tipo debe corresponder necesariamente al orden de los elementos en la tupla.

Ejemplo


 (Int, Int, Double) 

El tipo de datos de la tupla myProgramStatus del Listado 6.1 es (Int, String, Bool). El tipo de datos se establece implícitamente, ya que se determina automáticamente en función de los elementos de la tupla. Dado que el orden de especificación de los tipos de datos debe corresponder al orden de los elementos en la tupla, el tipo (Bool, String, Int) es diferente de (Int, String, Bool).

El listado 6.2 compara los tipos de datos de las diversas tuplas.

Listado 6.2

 var tuple1 = (200, "In Work", true) var tuple2 = (true, "On Work", 200) print( type(of:tuple1) == type(of:tuple2) ) 

Consola

 false 

Para comparar los tipos de datos de las tuplas, se utilizan los valores devueltos por el tipo de función global (de :), que determina el tipo de objeto que se le pasa.
Suponga que en la tupla myProgramStatus, el primer elemento debe ser un valor Float en lugar de un entero. En este caso, puede determinar explícitamente el tipo de datos de la tupla (dos puntos después del nombre del parámetro) (Listado 6.3).

Listado 6.3

 //       let floatStatus: (Float, String, Bool) = (200.2, "In Work", true) floatStatus // (.0 200.2, .1 “In Work”, .2 true) 

No está limitado a ningún número específico de elementos de tupla. Una tupla puede contener tantos elementos como sea necesario (pero recuerde que no se recomienda usar más de siete elementos). El listado 6.4 muestra un ejemplo de creación de una tupla de cuatro elementos del mismo tipo. Utiliza un alias del tipo de datos Int, que no está prohibido.

Listado 6.4

 //     Int typealias numberType = Int //       let numbersTuple: (Int, Int, numberType, numberType) = (0, 1, 2, 3) numbersTuple // (.0 0, .1 1, .2 2, .3 3) 

6.2. Interacción con elementos de tupla.


Una tupla está destinada no solo a establecer y almacenar un determinado conjunto de valores, sino también a interactuar con estos valores. En esta sección, discutiremos cómo interactuar con los valores de los elementos de tupla.

Inicialización de valores a parámetros.


Puede declarar nuevos parámetros con una expresión e inicializar los valores de todos los elementos de la tupla en ellos. Para hacer esto, después de la palabra clave var (o let, si declara constantes) entre paréntesis y una coma, debe especificar los nombres de los nuevos parámetros y, después del operador de inicialización, pasar la tupla. Tenga en cuenta que el número de parámetros declarados debe coincidir con el número de elementos de tupla (Listado 6.5).

Listado 6.5

 //      var (statusCode, statusText, statusConnect) = myProgramStatus //   print("  — \(statusCode)") print("  — \(statusText)") print("   — \(statusConnect)") 

Consola:

 200In Worktrue 

Con esta sintaxis, puede inicializar fácilmente valores arbitrarios en varios parámetros a la vez. Para hacer esto, en el lado derecho de la expresión, después del operador de inicialización, es necesario pasar no el parámetro que contiene la tupla, sino el literal de la tupla (Listado 6.6).

Listado 6.6

 /*         */ var (myName, myAge) = ("", 140) //    print("  \(myName),   \(myAge) ") 

Consola:

   ,   140  

Las variables myName y myAge se inicializan con los valores correspondientes de los elementos de tupla (Troll, 140). Usando esta sintaxis, puede ignorar elementos de tupla arbitrarios. Para hacer esto, debe especificar el carácter de subrayado como el nombre de la variable correspondiente al elemento a ignorar (Listado 6.7).

Listado 6.7

 /*      */ var (statusCode, _, _) = myProgramStatus 

Como resultado, el valor del primer elemento de la tupla, myProgramStatus, se escribe en la variable statusCode. Otros valores serán ignorados.

NOTA

El guión bajo en Swift indica ignorar el parámetro. Este no es el único ejemplo donde se puede usar. En el futuro, cuando estudies el material del libro, te encontrarás con él más de una vez.

Acceda a elementos de tupla a través de índices


Cada elemento de la tupla, además del valor, contiene un índice entero que se puede utilizar para acceder a este elemento. Los índices siempre están ordenados, comenzando desde cero. Por lo tanto, en una tupla de N elementos, el índice del primer elemento será 0, y se puede acceder al último utilizando el índice N-1.

Al acceder a un solo elemento, el índice se indica a través del punto después del nombre del parámetro en el que se almacena la tupla. El listado 6.8 muestra un ejemplo de acceso a los elementos individuales de una tupla.

Listado 6.8

 //      print("   — \(myProgramStatus.0)") print("   — \(myProgramStatus.1)") print("    — \(myProgramStatus.2)") 

Consola:

 200In Worktrue 

Acceda a elementos de tupla a través de nombres


Además del índice, a cada elemento de la tupla se le puede asignar un nombre único. Los nombres de elementos no son obligatorios y se usan solo para la conveniencia de usar tuplas. Se pueden dar nombres a todos y a partes de elementos. El nombre del elemento puede definirse tanto en el literal de tupla como definiendo explícitamente su tipo.

El listado 6.9 muestra un ejemplo de determinación de los nombres de elementos de tupla a través de un literal.

Listado 6.9

 let statusTuple = (statusCode: 200, statusText: "In Work", statusConnect: true) 

Los nombres de elementos especificados se pueden usar para obtener los valores de estos elementos. En este caso, se usa la misma sintaxis que cuando se accede a través de índices, cuando el índice se especificó a través del punto después del nombre del parámetro. Definir nombres no le impide usar índices. Los índices en una tupla siempre se pueden usar.

El listado 6.10 muestra cómo se usan los nombres de los elementos junto con los índices.

Listado 6.10

 //      print("   — \(statusTuple.statusCode)") print("   — \(statusTuple.statusText)") print("    — \(statusTuple.2)") 

Consola:

 200In Worktrue 

El acceso a elementos que usan nombres es más conveniente y visual que el acceso a través de índices.
Como se mencionó anteriormente, los nombres de los elementos se pueden especificar no solo en el literal de tupla, sino también al determinar explícitamente el tipo de datos. El listado 6.11 muestra el ejemplo correspondiente.

Listado 6.11

 /*          */ let anotherStatusTuple: (statusCode: Int, statusText: String, statusConnect: Bool) = (200, "In Work", true) //    anotherStatusTuple.statusCode // 200 

Edición de tuplas


Para tuplas del mismo tipo, se puede realizar la operación de inicializar el valor de una tupla en otra. Considere el ejemplo en el Listado 6.12.

Listado 6.12

 var myFirstTuple: (Int, String) = (0, "0") var mySecondTuple = (100, "") //       myFirstTuple = mySecondTuple myFirstTuple // (.0 100, .1 "") 

Las tuplas myFirstTuple y mySecondTuple tienen el mismo tipo de datos, por lo que el valor de uno se puede inicializar a otro. El primer tipo se establece explícitamente, y el segundo a través del valor inicializado.
Los índices y los nombres se pueden usar para cambiar los valores de elementos individuales en una tupla (Listado 6.13).

Listado 6.13

 //   var someTuple = (200, true) //     someTuple.0 = 404 someTuple.1 = false someTuple // (.0 404, .1 false) 

Las tuplas están muy extendidas en Swift. Por ejemplo, con su ayuda, puede devolver fácilmente no uno sino varios valores de su función (nos familiarizaremos con las funciones un poco más adelante).

NOTA


Las tuplas no le permiten crear estructuras de datos complejas, su único propósito es agrupar un cierto conjunto de parámetros heterogéneos o similares y transferirlos a la ubicación deseada. Para crear estructuras complejas, debe utilizar las herramientas de programación orientada a objetos (OOP) y, más específicamente, clases o estructuras. Los conoceremos más tarde.

»Se puede encontrar más información sobre el libro en el sitio web del editor
» Contenidos
» Extracto

25% de descuento en cupones para Swabbrookers - Swift

Tras el pago de la versión en papel del libro, se envía un libro electrónico por correo electrónico.

Source: https://habr.com/ru/post/469187/


All Articles