Crea una cuenta o inicia sesión

¡Continúa aprendiendo sin ningún costo! Únete y comienza a potenciar tu carrera

Valores de Retorno, Optionals y Parámetros de Salida

4/16
Recursos

Aportes 6

Preguntas 1

Ordenar por:

Los aportes, preguntas y respuestas son vitales para aprender en comunidad. Regístrate o inicia sesión para participar.

Resumen

Una función puede recibir parámetros pero no retornar nada:

func greet2(person: String) {
    print("Hola \(person)")
}

greet2(person: "Hernan")

Otro ejemplo:

func printAndCount(string: String) -> Int {
    print(string)
    return string.count
}

func printWithoutCounting(string: String) {
    let _ = printAndCount(string: string)
}
printAndCount(string: "Hola que tal")
printWithoutCounting(string: "Hola que tal")

Ejemplo de una función que recibe un array y devuelve una tupla:

func minMax(array:[Int]) -> (min: Int, max: Int) {
    if array.isEmpty { return nil }
    var currentMin = array[0]
    var currentMax = array[0]
    
    for value in array[1..<array.count] {
        if value < currentMin {
            currentMin = value
        } else if value > currentMax {
            currentMax = value
        }
    }

    return (currentMin, currentMax)
}

let bounds = minMax(array: [6, 4, 3, 1, 6, 5, 4, 7, 9])
print("El valor minimo es \(bounds.min) y el valor maximo es \(bounds.max)")

Si le pasamos un array vacío, esta función va a fallar.

minMax(array: [])

Para resolver este problema, lo que se haces es convertir la salida en un tipo de dato Optional agregando el símbolo ? al final para validar si el parametro esta o no vacío:

func minMax(array:[Int]) -> (min: Int, max: Int)? {
    if array.isEmpty { return nil }
    . . .
}

y para imprimir el resultado, tenemos que hacer un force unwrapping (no recomendado) o el optional unwrapping:

Force Unwrapping

Agregamos el simbolo !:

print("El valor minimo es \(bounds!.min) y el valor maximo es \(bounds!.max)")

Optional Unwrapping

Hacemos el uso de if let:

if let bounds = minMax(array: [6, 4, 3, 1, 6, 5, 4, 7, 9]) {
    print("El valor minimo es \(bounds.min) y el valor maximo es \(bounds.max)")
}
func minMax(array: [Int]) -> (min: Int, max: Int) {
    var currentMin = array[0]
    var currentMax = array[0]
    for value in array[1..<array.count] {
        if value < currentMin {
            currentMin = value
        } else if value > currentMax {
            currentMax = value
        }
    }
    return (currentMin, currentMax)
}
func minMax(array:[Int]) -> (min: Int, max: Int)?{
    if array.isEmpty{
        return nil
    }
    var currentMin = array[0]
    var currentMax = array[0]
    for value in array[1..<array.count] {
        if value < currentMin {
            currentMin = value
        } else if value > currentMax {
            currentMax = value
        }
    }
    return (currentMin, currentMax)
}


let bounds = minMax(array: [6,3,-9,10,12,15,17])
print(bounds!.min)
print(bounds!.max)
minMax(array: [])
func minMax (array :[Int])-> (min:Int, max: Int ) {
    var arr = Array(array)
    arr=arr.sorted(by : {$0 < $1})
    return (arr[0],arr[arr.endIndex-1])
}
let bounds = minMax(array:
    Array([1,2,1,12,5,345,6,4]))
print("El valos minimo es :\(bounds.min) , el maximo es: \(bounds.max)")

let bounds = minMax(array: array)
print("Los valores se hallan entre \(bounds!.min) y \(bounds!.max)")

let bounds2 = minMax(array: [])
print("Los valores se hallan entre \(bounds2?.min ?? 0 ) y \(bounds2?.max ?? 0)")