Как установить условие?
Код меняет иконку приложения, но нужно поставить условие с проверкой на уровень игрока (свойство - lvl) Пытался внедрить if/else, но код выдавал ошибку, мол тяжелое условие. Всем заранее спасибо!
Section(header: Text("Изменить иконку")){
Picker(selection: $iconSettings.currentIndex, label: Text("Значок")){
ForEach(0..<iconSettings.iconNames.count) { index in
HStack{
Image(uiImage: UIImage(named: self.iconSettings.iconNames[index] ?? "Основная") ?? UIImage())
.renderingMode(.original)
.resizable()
.scaledToFit()
.frame(width: 44, height: 44)
.cornerRadius(8)
Spacer().frame(width: 8)
Text(self.iconSettings.iconNames[index] ?? "Основная")
.frame(alignment: .leading)
} //: HSTACK
.padding(3)
}
} //: Picker
.onReceive(
[self.iconSettings.currentIndex].publisher.first()) { (value) in
let index = self.iconSettings.iconNames.firstIndex(of: UIApplication.shared.alternateIconName) ?? 0
if index != value{
UIApplication.shared.setAlternateIconName(self.iconSettings.iconNames[value]){ error in
if let error = error {
print(error.localizedDescription)
} else {
print("Success!")
}
}
}
} //: onReceive
} //: SECTION 1
Ответы (1 шт):
Автор решения: VAndrJ
→ Ссылка
Если компилятор выдаёт ошибку, что условие тяжёлое, его невозможно вывести in reasonable time, то дробите на части. Делайте отдельные View или методы. Начните с HStack, по Вашему примеру:
func getIconTitleView(index: Int) -> some View {
HStack{
Image(uiImage: UIImage(named: self.iconSettings.iconNames[index] ?? "Основная") ?? UIImage())
.renderingMode(.original)
.resizable()
.scaledToFit()
.frame(width: 44, height: 44)
.cornerRadius(8)
Spacer().frame(width: 8)
Text(self.iconSettings.iconNames[index] ?? "Основная")
.frame(alignment: .leading)
} //: HSTACK
.padding(3)
}
// и заменить:
...
ForEach(0..<iconSettings.iconNames.count) { index in
getIconTitleView(index: index)
}
И т.д.