Как установить условие?

Код меняет иконку приложения, но нужно поставить условие с проверкой на уровень игрока (свойство - 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)
    }

И т.д.

→ Ссылка