当我删除具有交替 .listRowBackground 颜色的行时,SwiftUI / iOS 应用程序崩溃

问题描述 投票:0回答:1

我为列表设置了交替颜色: .listRowBackground((self.restaurants.firstIndex(of: Restaurant)! % 2 == 0) ? Color.myLightGray: Color.white),但是当我删除一行时,程序崩溃并返回以下错误:致命错误:展开可选值时意外发现 nil

如果我删除代码中的 .listRowBackground 行,当我删除列表中的一行时,程序运行正常,但当然我不会得到交替的颜色。

我感谢解决此错误的任何帮助。

        List {
            ForEach(restaurants) { restaurant in
                
                NavigationLink(value: restaurant) {
                    VStack {
                        HStack {
                            let uiimage = UIImage(data: restaurant.photo)
                            Image(uiImage: uiimage ?? UIImage(imageLiteralResourceName: "pepper"))
                                .resizable()
                                .aspectRatio(contentMode: .fill)
                                .frame(maxWidth: 40, maxHeight: .infinity)
                                .clipShape(Circle())
                                .padding(.init(top: 0, leading: 0, bottom: 0, trailing: 0))
                            Text(restaurant.location)
                            Spacer()
                            EmojiRatingView(rating: restaurant.mainGrade)
                            
                                .font(.system(size: 12))
                                .foregroundColor(.red)
                        }
                    }.frame(height: 36)

                }
                .listRowBackground((self.restaurants.firstIndex(of: restaurant)! % 2 == 0) ? Color.myLightGray: Color.white)

            }.onDelete(perform: deleteRestaurants)

        }


func deleteRestaurants(at offsets: IndexSet) {
        for offset in offsets {
            let restaurant = restaurants[offset]
            modelContext.delete(restaurant)
        }
    }
swiftui swiftui-list
1个回答
0
投票

这是预期行为,您将被

(self.restaurants.firstIndex(of: restaurant)!
强制打开。如果它是 nil ,尝试提供一个默认值,而不是像这样强制它。

.listRowBackground(
    (restaurant.firstIndex(of: restaurant) ?? 0) % 2 == 0 ? Color.black : Color.blue
)
© www.soinside.com 2019 - 2024. All rights reserved.