Счетчик нажатий выше 10 возвращается к 1 - PullRequest
0 голосов
/ 08 января 2020

Я пытаюсь просто нажать кнопку, и она добавляет 1 к ярлыку. Если эта этикетка ниже 3, напечатайте ее ниже трех. Если оно выше 3, выведите его выше. Это работает до 10, после чего выводится значение ниже трех, даже если на этикетке все еще отображается 10 или выше.

var counter = 0
@IBOutlet weak var count: UILabel!

  @IBAction func testigbutton(_ sender: UIButton) {

       counter = counter + 1
       count.text = String(format: "%i", counter)

    if count.text! < "3" {

        print("Less than 3")
    } else if count.text! > "10" {

        print("More than 3")
    }
  }

Ответы [ 3 ]

4 голосов
/ 08 января 2020

Сравнение String выполняется символ за символом.

"9" больше "3", потому что символ 9 выше символа 3, если отсортировано.

"10" меньше, чем "3", потому что, поскольку это делает посимвольное сравнение, "1" меньше, чем "3", и заканчивается там.

Если вам нужно провести числовое сравнение (фактическое число вместо строк), используйте:

if Int(count.text!) < 3 { ... } else { ... }

Обратите внимание, что я сравниваю фактическую Int, а не String.

1 голос
/ 08 января 2020

Поскольку вы сравниваете строку, она проверяет каждый символ. Другими словами, вместо сравнения с 10 он сравнивается с 1, а затем с 0. Так как 1 равен <3, он печатает это. Все, что вам нужно, чтобы это исправить, это либо просто сравнить со своей переменной счетчика, либо привести его к Int или Double с чем-то вроде <code>Int(count.text!)

1 голос
/ 08 января 2020

Измените строку

if count.text! < "3" {

на:

if counter < 3 {

Таким образом, вы будете сравнивать числа по их порядку, а не строки по лексикографическому c порядку.

...