Este es un pequeño resumen de las clases de la sección Condicionales y Operaciones Básicas. Aquí puedes encontrar código tal cual está escrito en las clases, y código que he cambiado para algunos ejemplos. Hay algunos links de referencia a la documentación de Swift para revisar los temas vistos en el curso de introducción a Swift del profesor Juan Gabriel. Si tienes algún comentario o sugerencia es bienvenido 😃
Existen tres tipos de operadores:
let b = 10vara = 5a = b
let (x, y) = (1, 2)
Recuerda que este operador significa: El valor de la derecha se asigna a la variable de la izquierda. Siempre.
Recuerda las formas correctas de declarar constantes y variables en Swift. Sección: Naming Constants and Variables.
The Basics - The Swift Programming Language (Swift 5.3)
ifa == b
{
print("El valor de a y b son iguales")
}
¿Es a igual a b? Sí o No
1 + 25 - 32 * 310.0 / 2.5
Operadores aritméticos con números, similar a C/C++
Con strings:
"Hello " + "World"
Resultado: “Hello World”, similar a Java.
9 % 4
El módulo funciona igual que en C/C++. Recuerda que solo se puede puede usar con números enteros. El resultado también solo será un entero. Para trabajar números de punto flotante, ve a la sección Truncating Remainder.
La definición de módulo es el residuo de la división entre dos números. Si la división es entera, el residuo será 0. Si no es entera habrá un sobrante: por ejemplo, 9 % 4 = 1. Para llegar a ello tenemos:
letfive = 5letminusFive = -five
letminusSix = -6letalsoMinusSix = +minusSix
El operador - en un número o una variable de tipo número le cambia el signo a este último.
El operador + le mantiene el mismo signo.
Aunque el + aparentemente no tendría utilidad, podemos usarlo con la sintaxis que también usa C o Java:
var number = 5number += 3// Equivalente anumber = number + 3number -= 2// Equivalente anumber = number - 2
Incrementar una variable en 3 y guardarla en la misma variable.
Puedes usar el resto de operaciones aritméticas:
number /= 2number *= 12number %= 7//number = number % 7
Declaración de la función:
func truncatingRemainder(dividingBy other: [Double] -> [Double](https://developer.apple.com/documentation/swift/double)
Cumple la condición:
Con esta función obtienes t, el residuo. Equivale a lo que entre enteros es: a % c = t
Similar a la ecuación escrita más arriba con el ejemplo de 9 % 4 sólo que válida para números de punto flotante, tenemos:
// a = 12.5, b = 14.0, c = 0.85, t = 0.6let a1 = 12.5print(a1 / 0.85) // a/c = 14.70588... let b1 = (a1 / 0.85).rounded(.towardZero)// 14.0let t = a1.truncatingRemainder(dividingBy: 0.85)// 0.6let a2 = b1 * 0.85 + t // Comprobación a = b * c + tprint(a2) // 12.5
Si te fijas en este caso al obtener la parte entera de a/c, es decir truncando, estás obteniendo b al deshacerte del sumando t/c. Por tanto podrías obtener t despejando de la ecuación, y te dará lo mismo que la función truncatingRemainder:
let t = a1.truncatingRemainder(dividingBy: 0.85)// 0.6var prueba = ( ( a1 / 0.85 ) - b1 ) * 0.85// t = ( a/c - b) * c
print(prueba) // 0.6
Por último fíjate que tal cual en la operación módulo con enteros, b es sólo la parte entera de la división a/c (como en 9/4 = 2) así estemos tratando con números double, dado que lo que falta de esta división es el residuo y es lo que queremos hallar. Es el mismo principio para ambos.
Prueba este código en tu playground.
//Comparaciones
1 == 1
2 == 1
1 != 2
2 > 1
3 <= 5
2 <= 1
let name = "Juan Gabriel"if name == "Juan Gabriel"
{
print("Bienvenido \(name)")
}else{
print("Cuidado, ha aparecido \(name)")
}
//Output: "Bienvenido Juan Gabriel\n"
Comparación de tuplas:
(1, "Juan Gabriel") < (2, "Ricardo Celis") //true
(3, "Juan Gabriel") < (3, "Ricardo Celis") //true
(3, "Ricardo Celis") < (3, "Juan Gabriel") //false
(4, "perro") == (4, "perro") //true
//("perro", false) < ("perro", true) No tiene sentido por los booleanos
("perro", false) == ("perro", true) //false
letcontentHigh = 40
var hashImage = true
var rowHeight = 0
// 1.
if hashImage
{
rowHeight = contentHigh + 50
}else{
rowHeight = contentHigh + 10
}
// 2.
rowHeight = contentHigh + (hashImage ? 50 : 10)
//Si hashImage es true, el sumando es 50\. Si es false, es 10
Si te fijas para este caso en la manera tradicional if-else estás repitiendo la misma línea de código excepto un número constante diferente para cada caso. Con la segunda manera estás logrando lo mismo sin un if-else y una vez lo memorices será muy intuitivo de usar.
let defaultAge = 18
var userAge: Int?
userAge = 31
var ageToBeUsed = userAge ?? defaultAge
//Con ternario ageToBeUsed = (userAge != nil ? userAge! : defaultAge)
userAge es una variable optional. La edad que va a usar el código es userAge si existe. Sino defaultAge. El ejemplo comentado con el operador ternario era tan usado que decidieron implementar el Nil Coalescing.
El operador de rango cerrado define un rango que va de a hasta b de la siguiente manera:
//Ejemplos
for idx in1...5
{
print(idx)
}
// 5 timesfor idx in1..<5
{
print(idx)
}
// 4 times
let names = ["Ricardo", "Juan Gabriel", "Pedro"]
// 1.for i in0..count
{
print("La persona \(i + 1) se llama \(names[i])")
}
// 2.for name in names {
print(name)
}
// 3.for name in names[1...] {
print(name)
}
// 4.for name in names[...2] {
print(name)
}
// 5.for name in names[..<2] {
print(name)
}
!a
)a && b
)a || b
)Los operadores && y || se asocian desde la izquierda. Es decir que las expresiones compuestas se evalúan desde la sub-expresión que está más a la izquierda.
lethasMoney = falselethasInvitation = trueletenterDoorCode = trueletpassRetinaScan = falseif enterDoorCode && passRetinaScan || hasMoney || hasInvitation {
print("Has entrado")
}else{
print("Acceso denegado")
}
//Output: Has entrado
Recuerda que siempre puedes referirte a la documentación oficial de Swift. Los temas tratados en esta parte están la sección Basic Operators.