Быстрое постоянное соединение с переменной для определения оператора if - PullRequest
0 голосов
/ 11 марта 2019

Я выполнил задачу, чтобы создать приложение-историю, которое будет иметь разные окончания в зависимости от ответа, который вы дадите.И приложение работает нормально, но я не совсем понимаю.По сути, это очень просто: в нем есть UILabel с текстом и 2 кнопки UIB, которые меняют каждый шаг игры.

Чтобы отделить наши операторы if от другого, нам нужно было создать переменную с именем storyIndexкоторый мы ставим после кода sender.tag ==.

, выглядит следующим образом:

@IBAction func buttonPressed(_ sender: UIButton) {

    if sender.tag == 1 && storyIndex == 1 {

        storyTextView.text = story3
        topButton.setTitle(answer3a, for: .normal)
        bottomButton.setTitle(answer3b, for: .normal)
        storyIndex = 3

    }

    else if sender.tag == 2 && storyIndex == 1 {

        storyTextView.text = story2
        topButton.setTitle(answer2a, for: .normal)
        bottomButton.setTitle(answer2b, for: .normal)
        storyIndex = 2
    }

    else if sender.tag == 1 && storyIndex == 3 {

        storyTextView.text = story6
        storyIndex = 6
        topButton.isHidden = true
        bottomButton.isHidden = true
    }

    else if sender.tag == 2 && storyIndex == 3 {
        storyTextView.text = story5
        storyIndex = 5
        topButton.isHidden = true
        bottomButton.isHidden = true

    }

    else if sender.tag == 1 && storyIndex == 2 {

        storyTextView.text = story3
        topButton.setTitle(answer3a, for: .normal)
        bottomButton.setTitle(answer3b, for: .normal)
        storyIndex = 3
        }

    else if sender.tag == 2 && storyIndex == 2 {

        storyTextView.text = story4
        storyIndex = 4
        topButton.isHidden = true
        bottomButton.isHidden = true
    }

, а переменная помещалась ниже соединений IBoutlets:

var storyIndex : Int = 1

иВ верхней части кода чуть ниже класса у нас были наши константы, содержащие текст истории:

например:

let story1 = "Your car has blown a tire on a winding road in the middle of nowhere with no cell phone reception. You decide to hitchhike. A rusty pickup truck rumbles to a stop next to you. A man with a wide brimmed hat with soulless eyes opens the passenger door for you and asks: \"Need a ride, boy?\"."

Так что я наконец-то выяснил, как это сделать с небольшой помощью на вкладке «Вопросы и ответы».но на самом деле я не понимаю, как Свифт знает, что storyIndex скажем, 2 - это история 2?где я определяю это, в основном, где находится связь между константами и переменной storyIndex.Слово Индекс работает так?Или я это определил?

Не проще ли сделать что-то подобное?

if sender.tag == 1 && storyTextView.text == (\story1) {

Извините за мой английский, это мой третий язык.

1 Ответ

0 голосов
/ 11 марта 2019

Код, который вы разместили, просто запускается при нажатии кнопки. Кнопка определяется на основе свойства tag, которое устанавливается в InterfaceBuilder. Похоже, действие 1 является tag = 1 предыдущим, а действие 2 - tag = 2 следующим.

Затем код просматривает текущий индекс истории и нажатую кнопку (tag), определяет, что представляет собой следующий индекс истории, и устанавливает соответствующий текст истории.

Причина, по которой он не сравнивает текст рассказа, заключается в том, что текст рассказа на самом деле не дает вам простого способа увидеть, где вы находитесь, если вы не читаете текст. Кроме того, сравнение строк занимает больше времени, чем сравнение целых чисел, хотя в этом случае оно будет незначительным.

Здесь отображение между индексом и текстом истории выполняется внутри каждого оператора if. Лучшим способом было бы иметь массив, в котором текст истории проиндексирован по индексу истории (например: storyText[storyIndex]).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...