微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

编译器无法进行类型检查 - SwiftUI

如何解决编译器无法进行类型检查 - SwiftUI

我正在努力快速适应 MVVM 模式。所以我写了一些代码,我一次又一次地收到这个错误

编译器无法在合理的时间内对该表达式进行类型检查;尝试将表达式分解为不同的子表达式

在这里读了很多,我知道将代码分解成更小的和平会有所帮助 - 但是使用 SwiftUI,我的意思是,这非常困难,因为我编写的代码正是使用 SwiftUI 的方式(纠正我如果我错了)。

所以,我现在很沮丧,试图让它发挥作用。也许有人有想法?

截图如下:

enter image description here

代码

import SwiftUI

struct ContentView: View {
    
    var modelPizza = PizzaModel()
    
    var body: some View {
        
            NavigationView {
                
                List(modelPizza.pizzas) { p in
                    
                    NavigationLink(
                            destination:
                                Text("Destination"),label: {
                                vstack(alignment: .leading) {
                                    Text(p.name)
                                        .font(.title)
                                        
                                    HStack {
                                        Text(p.toping1)
                                            .italic()
                                        Text(p.toping2)
                                            .italic()
                                        Text(p.toping3)
                                            .italic()
                                    }
                                }
                                    
                            })
                    }.navigationTitle("Pizzas")
                Button(action: {
                    print("Hello")
                },label:
                Text("Hello")
                )
            }
        
        }
        
    }


struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}

希望收到您的来信 - 提前致谢。

解决方法

如果你想这样写,请确保你的 Pizza 结构符合 Identifiable;否则,使用 List(modelPizza.pizzas,id: \.self) 并使 Pizza 符合 Hashable。

我建议为pizza 添加一个UUID 属性以符合Identifiable。 下面的代码是一个适用于 Swift 5,Xcode 版本 12.3 的示例:

struct ContentView: View {
    
    var modelPizza = PizzaModel()
    
    var body: some View {
        NavigationView {
            List(modelPizza.pizzas) { pizza in
                NavigationLink(destination: Text("Destination")) {
                    VStack(alignment: .leading) {
                        Text(pizza.name)
                            .font(.title)
                        
                        HStack {
                            Text(pizza.topping1)
                                .italic()
                            Text(pizza.topping2)
                                .italic()
                            Text(pizza.topping3)
                                .italic()
                        }
                    }
                }
            }
        }
    }
 
    struct PizzaModel {
        var pizzas = [Pizza]()
        
        struct Pizza: Identifiable {
            var id = UUID()
            
            var name: String
            
            var topping1: String
            var topping2: String
            var topping3: String
        }
    }
}

或者:

struct PizzaModel {
    var pizzas = [Pizza]()
    
    struct Pizza: Hashable {
        var name: String
        
        var topping1: String
        var topping2: String
        var topping3: String
    }
}

并使用 List(modelPizza.pizzas,id: \.self)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。