Estoy escribiendo una aplicación de check in para mi gimnasio en Xcode. Hice esto un año y medio para Android: ¿Hay alguna manera de hacerlo 2000 si las declaraciones en esto?

Pero ahora, estoy llegando a 2000 miembros y necesito agregar más. Desafortunadamente, y obviamente, Xcode se está estrellando cuando intento agregar más líneas.

Mi código es el siguiente:

    @IBAction func displayBarcode(_ sender: UIButton) {
        if nameTextField.text=="100001" {
            imageView.image = UIImage(named: ("All Barcodes/a0001.jpg"));  
        }    
        else if nameTextField.text=="100002" { imageView.image = UIImage(named: ("All Barcodes/a0002.jpg"));}
        else if nameTextField.text=="100003" { imageView.image = UIImage(named: ("All Barcodes/a0003.jpg"));}
        else if nameTextField.text=="100004" { imageView.image = UIImage(named: ("All Barcodes/a0004.jpg"));}
        else if nameTextField.text=="100005" { imageView.image = UIImage(named: ("All Barcodes/a0005.jpg"));}

... todo el camino hasta el 2000. Lo sé, absolutamente loco, pero ha funcionado. ¿Hay alguna forma de combinarlos en una declaración si / else en un rango, similar a la solución que alguien me dio para Android?

¡SInceramente Gracias!

0
mikgerdan1991 9 jun. 2021 a las 02:30

2 respuestas

La mejor respuesta

Aquí hay una solución básica para dividir la cadena y usar parte de él en el nombre de la imagen:

@IBAction func displayBarcode(_ sender: UIButton) {
    guard let input = nameTextField.text else {
        return
    }
    guard input.count == 6, input.prefix(2) == "10" else {
        return
    }
    let imageName = "All Barcodes/a\(input.suffix(4)).jpg"
    if let image = UIImage(named: imageName) {
        imageView.image = image
    }
}

Esto hace algo de validación trivial Muy (por ejemplo, count == 6 y revisa el prefijo para 10), que podría hacer más estricto si lo necesitaba, pero esto funciona para lo básico tarea.

1
jnpdx 8 jun. 2021 a las 23:59

Simplemente obtenga los últimos 4 dígitos, convierta en entero, verifique si su rango deseado contiene su valor y verifique si todos son dígitos:

let string = "100002"
let suffix = string.suffix(4)
let range = 1...2000
if let int = Int(suffix),
    suffix.count == 4,
    suffix.allSatisfy(("0"..."9").contains),
    range ~= int {
    let imageName = "All Barcodes/a\(suffix).jpg"
    print(imageName)
}

Esto imprimirá

Todos los códigos de barras / a0002.jpg

1
Leo Dabus 8 jun. 2021 a las 23:48