Skip to content

Commit 8628322

Browse files
authored
Merge pull request mouredev#4120 from kontroldev/main
#14, #15 - Swift
2 parents ca494e5 + 9c92831 commit 8628322

File tree

2 files changed

+174
-0
lines changed

2 files changed

+174
-0
lines changed
Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
import Foundation
2+
3+
/*
4+
* EJERCICIO:
5+
* Crea dos variables utilizando los objetos fecha (date, o semejante) de tu lenguaje:
6+
* - Una primera que represente la fecha (día, mes, año, hora, minuto, segundo) actual.
7+
* - Una segunda que represente tu fecha de nacimiento (te puedes inventar la hora).
8+
* Calcula cuántos años han transcurrido entre ambas fechas.
9+
*
10+
* DIFICULTAD EXTRA (opcional):
11+
* Utilizando la fecha de tu cumpleaños, formatéala y muestra su resultado de
12+
* 10 maneras diferentes. Por ejemplo:
13+
* - Día, mes y año.
14+
* - Hora, minuto y segundo.
15+
* - Día de año.
16+
* - Día de la semana.
17+
* - Nombre del mes.
18+
* (lo que se te ocurra...)
19+
*/
20+
21+
22+
// Obtén la fecha actual
23+
let currentDate = Date()
24+
25+
// Configura el formato de la fecha
26+
let dateFormatter = DateFormatter()
27+
dateFormatter.dateFormat = "yyyy/MM/dd HH:mm:ss"
28+
29+
// Define tu fecha de nacimiento (por ejemplo, 1 de enero de 1990 a las 12:00:00)
30+
let birthDateString = "1990/01/01 12:00:00"
31+
guard let birthDate = dateFormatter.date(from: birthDateString) else {
32+
fatalError("Error al convertir la cadena de fecha a objeto Date")
33+
}
34+
35+
// Calcula la diferencia de años entre la fecha actual y la fecha de nacimiento
36+
let calendar = Calendar.current
37+
let ageComponents = calendar.dateComponents([.year], from: birthDate, to: currentDate)
38+
let age = ageComponents.year!
39+
40+
print("Han transcurrido \(age) años desde tu fecha de nacimiento.")
41+
42+
43+
//MARK: - DIFICULTAD EXTRA (opcional)
44+
45+
// Configura el formato de la fecha
46+
let dateFormatter2 = DateFormatter()
47+
dateFormatter.dateFormat = "yyyy/MM/dd HH:mm:ss"
48+
49+
// Define tu fecha de nacimiento (por ejemplo, 1 de enero de 1990 a las 12:00:00)
50+
let birthDateString2 = "1990/01/01 12:00:00"
51+
guard let birthDate = dateFormatter.date(from: birthDateString) else {
52+
fatalError("Error al convertir la cadena de fecha a objeto Date")
53+
}
54+
55+
// Función para formatear y mostrar la fecha en diferentes formatos
56+
func displayFormattedDates(for date: Date) {
57+
let formats = [
58+
"dd/MM/yyyy", // Día, mes y año
59+
"HH:mm:ss", // Hora, minuto y segundo
60+
"D", // Día del año
61+
"EEEE", // Día de la semana
62+
"MMMM", // Nombre del mes
63+
"MM/dd/yyyy HH:mm", // Mes/día/año hora:minuto
64+
"yyyy/MM/dd", // Año/mes/día
65+
"MMM d, yyyy", // Mes abreviado día, año
66+
"EEEE, MMM d, yyyy", // Día de la semana, mes abreviado día, año
67+
"E, d MMM yyyy HH:mm:ss", // Día de la semana abreviado, día mes año hora:minuto:segundo
68+
]
69+
70+
for format in formats {
71+
dateFormatter.dateFormat = format
72+
let formattedDate = dateFormatter.string(from: date)
73+
print("Formato '\(format)': \(formattedDate)")
74+
}
75+
}
76+
77+
// Muestra las diferentes representaciones de la fecha de nacimiento
78+
displayFormattedDates(for: birthDate)
79+
Lines changed: 95 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,95 @@
1+
import Foundation
2+
3+
/*
4+
* EJERCICIO:
5+
* Utilizando tu lenguaje, crea un programa capaz de ejecutar de manera
6+
* asíncrona una función que tardará en finalizar un número concreto de
7+
* segundos parametrizables. También debes poder asignarle un nombre.
8+
* La función imprime su nombre, cuándo empieza, el tiempo que durará
9+
* su ejecución y cuando finaliza.
10+
*
11+
* DIFICULTAD EXTRA (opcional):
12+
* Utilizando el concepto de asincronía y la función anterior, crea
13+
* el siguiente programa que ejecuta en este orden:
14+
* - Una función C que dura 3 segundos.
15+
* - Una función B que dura 2 segundos.
16+
* - Una función A que dura 1 segundo.
17+
* - Una función D que dura 1 segundo.
18+
* - Las funciones C, B y A se ejecutan en paralelo.
19+
* - La función D comienza su ejecución cuando las 3 anteriores han
20+
* finalizado.
21+
*/
22+
23+
import Foundation
24+
25+
// Función asíncrona
26+
func asyncFunction(name: String, duration: Int) {
27+
let startTime = Date()
28+
print("La función '\(name)' ha empezado a las \(startTime) y durará \(duration) segundos.")
29+
30+
// Simula una tarea larga usando sleep
31+
sleep(UInt32(duration))
32+
33+
let endTime = Date()
34+
print("La función '\(name)' ha terminado a las \(endTime).")
35+
}
36+
37+
// Función que ejecuta la función asíncrona
38+
func executeAsyncFunction(name: String, duration: Int) {
39+
DispatchQueue.global().async {
40+
asyncFunction(name: name, duration: duration)
41+
}
42+
}
43+
44+
// Ejemplo de uso
45+
executeAsyncFunction(name: "Tarea 1", duration: 5)
46+
executeAsyncFunction(name: "Tarea 2", duration: 3)
47+
48+
// Mantén el programa en ejecución para que puedas ver el resultado de las funciones asíncronas
49+
RunLoop.current.run(until: Date().addingTimeInterval(10))
50+
51+
//MARK: - DIFICULTAD EXTRA (opcional)
52+
53+
// Función asíncrona 👇
54+
func asyncFunction(name: String, duration: Int, completion: @escaping () -> Void) {
55+
let startTime = Date()
56+
print("La función '\(name)' ha empezado a las \(startTime) y durará \(duration) segundos.")
57+
58+
// Simula una tarea larga usando el metodo sleep
59+
sleep(UInt32(duration))
60+
61+
let endTime = Date()
62+
print("La función '\(name)' ha terminado a las \(endTime).")
63+
64+
// Llama al completion 'handler' al finalizar
65+
completion()
66+
}
67+
68+
// Ejecuta la función asíncrona con un DispatchGroup
69+
func executeAsyncFunction(name: String, duration: Int, group: DispatchGroup) {
70+
group.enter()
71+
DispatchQueue.global().async {
72+
asyncFunction(name: name, duration: duration) {
73+
group.leave()
74+
}
75+
}
76+
}
77+
78+
// Crear un DispatchGroup para sincronizar las tareas
79+
let group = DispatchGroup()
80+
81+
// Ejecutar funciones C, B y A en paralelo
82+
executeAsyncFunction(name: "C", duration: 3, group: group)
83+
executeAsyncFunction(name: "B", duration: 2, group: group)
84+
executeAsyncFunction(name: "A", duration: 1, group: group)
85+
86+
// Ejecutar la función D después de que C, B y A hayan finalizado
87+
group.notify(queue: DispatchQueue.global()) {
88+
asyncFunction(name: "D", duration: 1) {
89+
print("Todas las funciones han terminado.")
90+
}
91+
}
92+
93+
// Mantén el programa en ejecución para ver los resultados
94+
RunLoop.current.run(until: Date().addingTimeInterval(10))
95+

0 commit comments

Comments
 (0)