Я пишу приложение для регистрации в спортзале в XCode. Я спросил об этом полтора года назад для Android: Есть ли способ использовать в этом инструкции 2000 else if?

Но сейчас у меня 2000 участников, и мне нужно добавить больше. К сожалению, и это очевидно, Xcode дает сбой, когда я пытаюсь добавить больше строк.

Мой код такой:

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

... вплоть до 2000 года. Я знаю, совершенно безумно, но это сработало. Есть ли способ объединить их в один оператор if / else в диапазон, аналогичный решению, которое кто-то дал мне для Android?

Искренне спасибо!

0
mikgerdan1991 9 Июн 2021 в 02:30

2 ответа

Лучший ответ

Вот базовое решение для разделения строки и использования ее части в имени изображения:

@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
    }
}

Это выполняет некоторую очень тривиальную проверку (например, count == 6 и проверяет префикс для 10), которую вы могли бы сделать более строгой, если бы вам это было нужно, но это работает для основных задача.

1
jnpdx 8 Июн 2021 в 23:59

Просто получите последние 4 цифры, преобразуйте их в целое число, проверьте, содержит ли желаемый диапазон ваше значение, и все ли они цифры:

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

Это напечатает

Все штрих-коды / a0002.jpg

1
Leo Dabus 8 Июн 2021 в 23:48