#swiftui #repeat
Вопрос:
Мне нужно отображать определенный текст для каждого дня года, когда я повторяю код около 30 раз, все в порядке, если я расширяю код на каждый день 365 раз, я получаю ошибку.
Код:
if ("(formatDate(date: today))") .elementsEqual("01-01"){
Text("Lucy")
}
else if ("(formatDate(date: today))") .elementsEqual("02-01"){
Text("Karl")
}
else if ("(formatDate(date: today))") .elementsEqual("03-01"){
Text("Jack")
}
else if ("(formatDate(date: today))") .elementsEqual("04-01"){
Text("Tim")
}
else if ("(formatDate(date: today))") .elementsEqual("05-01"){
Text("Sarah")
}
// and so on ... 365x
Ошибка:
Компилятор не может выполнить проверку типа этого выражения в разумные сроки; попробуйте разбить выражение на отдельные под-выражения
Комментарии:
1. Действительно ли нет более эффективного способа достичь желаемых результатов, чем организация с 365 филиалами?
if/else
Действительно ли тоText
, что вы генерируете, на 100% уникально для каждого конкретного случая, или есть функция, которую вы можете использовать для генерации наText
основе результата, который вы ищете?2. Текст на 100% уникальное имя для каждого дня.
Ответ №1:
Я думаю , что самый простой способ-это настроить a Dictionary<String,String>
, где ключ-это отформатированная дата, а значение-результирующий текст:
let dateTextDictionary = [
"01-01":"Lucy",
"02-01":"Karl",
"03-01":"Tim",
]
if let resultText = dateTextDictionary[formatDate(date: today)] {
Text(resultText)
}
Этот словарь также может быть загружен из файла JSON или plist.
Ответ №2:
Скорее всего, ваша программа слишком неэффективна. Если я правильно понимаю ваш вопрос, вот что я бы сделал:
var texts = ["Lucy", "Karl", "Jack", "Tim", "Sarah"] //and so on with whatever texts you are using.
for x in 1...365 {
if x < 10 {
if ("(formatDate(date: today))") .elementsEqual("0(x)-01"){
Text("(texts[x-1])")
}
} else {
if ("(formatDate(date: today))") .elementsEqual("(x)-01"){
Text("(texts[x-1])")
}
}
}
Комментарии:
1. Вам не хватает
()
знаков интерполяции в вашемText
s