如何解决编译器无法进行类型检查 - SwiftUI
我正在努力快速适应 MVVM 模式。所以我写了一些代码,我一次又一次地收到这个错误:
编译器无法在合理的时间内对该表达式进行类型检查;尝试将表达式分解为不同的子表达式
我在这里读了很多,我知道将代码分解成更小的和平会有所帮助 - 但是使用 SwiftUI,我的意思是,这非常困难,因为我编写的代码正是使用 SwiftUI 的方式(纠正我如果我错了)。
所以,我现在很沮丧,试图让它发挥作用。也许有人有想法?
截图如下:
和代码:
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 举报,一经查实,本站将立刻删除。