#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