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 10

Preguntas 1

Ordenar por:

驴Quieres ver m谩s aportes, preguntas y respuestas de la comunidad?

o inicia sesi贸n.

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)")
}

Comparto mi apuntes:

Hola chicos/as! Les comparto mi implementaci贸n de este c贸digo ya que Swift ha cambiado mucho con respecto al manejo de retorno de datos opcionales, vac铆os o los cl谩sicos out of range鈥

// Return a tuple with optional data output
func minMax(array: [Int]) -> (min: Int, max: Int)? {
    
    var currentMin: Int
    var currentMax: Int
    
    if array.isEmpty {
        return nil
    }else {
        currentMin = array[0]
        currentMax = array[0]
        for value in array[1..<array.count] {
            if value < currentMin {
                currentMin = value
            }else if value > currentMax{
                currentMax = value
            }
        }
    }
    
    return (currentMin, currentMax)
}

// Call function and pass parameters
let bounds = minMax(array: [6,3,-8,3,1,9,5,15,-9])
let defaultArray = (-0,0)
var boundToBeUsed = bounds ?? defaultArray

print("The min value of the array is: \(boundToBeUsed.min) and the max value of the array is: \(boundToBeUsed.max)")

// Empty array case (error) => use nil
if let boundsEmptyArray = minMax(array: []) {
    print("The min value of the array is: \(boundsEmptyArray.min) and the max value of the array is: \(boundsEmptyArray.max)")
}else {
    print("The array to minMax func should have a entry data")
}

Mi c贸digo:

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: [2,3,-2,3,5,6,9])
print("Values max: \(bounds?.max ?? 0), min: \(bounds?.min ?? 0)")
//funcion que no devuelva nada:
func greeting2(person: String){
    print("Hola \(person)!")
}

greeting2(person: "Juan Villalvazo")


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

printAndCount(string: "Hola como est谩s?")

// si no quiero usar el int de la funci贸n anterior:
func prinWithoutCounting(string: String){
    let _ = printAndCount(string: string)
}

prinWithoutCounting(string: "Hola como est谩s?")

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)")