Как проверить, есть ли в массиве элемент / элементы, начинающиеся с номера в Swift (iOS 9)

#ios

#iOS

Вопрос:

Давайте предположим, что это мой массив в swift 2.0: {«8 букв», «6 букв», «9 букв», «Джон», «Фредрик»}. Во время выполнения приложения эти «буквы X» будут заменены именем. Как я могу проверить, есть ли в массиве элемент, который начинается с числа, например «8 букв»? Я хочу загрузить level2 приложения, когда все эти «буквы X» были заменены именем. Спасибо за ваше время.

Комментарии:

1. Хотя вы могли бы изучить строки, более сложный подход заключается в том, чтобы иметь массив структур с логическим значением или перечислением, которое указывает «тип». Затем, когда вы меняете элемент массива, вы можете соответствующим образом задать тип

2. Спасибо Paulw11. Но нет способа реализовать логику структуры, если я не перепишу весь код заново. Вышеупомянутый массив принимает свои значения из UILabel, расположенного в представлении, и эта метка принимает свои значения из текстового файла. В каждом текстовом файле содержится 7 вопросов, ответы на которые пользователь должен угадать, когда пользователь найдет ответ, например: Оливер Твист, тогда «11 букв» будут заменены на «Оливер Твист» в массиве. Когда пользователь соберет все семь ответов, в массиве больше не будет «букв X», приложение может перейти на уровень 2, чтобы показать еще семь вопросов.

3. Лучше провести рефакторинг сейчас, чем продолжать с плохим выбором дизайна, который позже вызовет проблемы. Ваша UILabel не должна быть источником данных, это должно быть только представление вашей модели данных

Ответ №1:

Я бы использовал enum с соответствующим значением, вот как я бы с этим справился:

 enum Whatever {
    case number(Int)
    case value(String)
}

let myArray: [Whatever] = [.number(8), .number(6), .number(9), .value("John"), .value("Frederick")]

myArray.forEach {
    switch $0 {
    case .number(let numberOfLetters):
        // Do something
        break
    case .value(let value):
        // Do something
        break
    }
}
  

Таким образом, вы не пытаетесь анализировать строки, проверяя наличие значений Int. Дайте мне знать, если у вас есть какие-либо вопросы. Надеюсь, это поможет.

Комментарии:

1. Большое спасибо за ваше время и сотрудничество pob21! Но проблема в том, что это приложение имеет 10 уровней. На каждом уровне в массиве разные слова, поэтому количество букв в одном массиве может быть 5, 9,8, 4, 3, а в другом — 7,9,10, 4,8 и так далее… Как я могу предсказать или упомянуть их все?

2. var подсказки = answersLabel.text! .componentsSeparatedByString(«n»)

3. подсказки [answerPosition] = currentAnswer.text!

4. Метка ответа.текст = подсказки. joinWithSeparator(» n»)

5. Теперь, после первого предположения пользователя (допустим, предположение «Нью-Йорк»), массив «подсказки» выглядит следующим образом: [«9 букв», «12 букв», «7 букв», «5 букв», «6 букв», «Нью-Йорк», «10 букв»]. Таким образом, пользователю все еще нужно еще 6 догадок для завершения level1. После каждого успешного предположения мне нужно проверить, остался ли в массиве «подсказки» какой-либо элемент «X Letters»? Если нет, мы переходим на уровень 2