Можно ли условно изменить значение переменной?
У меня есть структура меню, которая должна отображаться по-разному в зависимости от того, были ли выполнены какие-либо вычисления, активный = истина/ложь.
Ниже приведено то, что я ХОЧУ написать, но ясно, что вы не можете поместить условное выражение в оператор var. Как я мог этого добиться?
struct Results: Identifiable {
var id = UUID().uuidString
var category: String
var active: Bool
}
var results = [
if GlobalVariables.calculated == true {
Results(category: "Results", active: true)
} else {
Results(category: "Results", active: false)
}
]
Вы объявили его как изменяемый массив, значит ли это, что вы хотите добавить больше значений?
Mutable = нет - спасибо - это изменится.





для этого простого случая вы можете попробовать использовать тройку, например:
var results = [ GlobalVariables.calculated ? Results(category: "Results", active: true) : Results(category: "Results", active: false)
]
print("---> results: \(results) \n")
В итоге я использовал следующий синтаксис: (GlobalVariables.calculated ? true : false)
Лучшим выбором является использование вычисляемого свойства
var results : [Results] {
return [Results(category: "Results", active: GlobalVariables.calculated)]
}
или, если results предполагается инициализировать только один раз, свойство lazy
lazy var results : [Results] = {
return [Results(category: "Results", active: GlobalVariables.calculated)]
}()
Примечание: типы, которые в основном используются в массиве, должны быть названы в единственном числе.
calculated может быть необязательным в оп.
@MojtabaHosseini Если да, добавьте == true
Я упростил массив для целей вопроса. Есть 25 строк и 6 столбцов/элементов. Должен ли я по-прежнему следовать этому подходу?
Если конфигурация может измениться, используйте вычисляемое свойство, в противном случае — ленивое инстанцированное свойство.
Поскольку массив var велик, эти подходы громоздки. Вместо этого я выбрал более простой метод, который состоит в том, чтобы загрузить базовые переменные, а затем выполнить условный тест в .onAppear и, если false, изменить требуемые значения по мере необходимости, например. результаты[25].актив = ложь. Это работает, и значения изменяются правильно, но результаты этих атрибутов на экране не изменились. Есть ли способ перезагрузить новые значения в представлении? Пытался изменить все на переменную @State, но это потребует большого рефакторинга.
Поскольку вы говорите о SwiftUI, что изначально было неясно, вычисляйте материал в модели представления.
Я ожидал, что ответ будет более сложным, чем он был. В конце концов я подал в суд на этот синтаксис: (GlobalVariables.calculated ? true : false). Спасибо за помощь.
Как насчет использования вычисляемого свойства? Похоже, это было бы уместно в данной ситуации. Вы хотите, чтобы
resultsимел соответствующее значениеactiveкаждый раз, когда вы к нему обращаетесь, верно?