编译器无法进行类型检查 - SwiftUI
The compiler is unable to type-check - SwiftUI
我正在努力适应 swift 中的 MVVM 模式。所以我写了一些代码,然后一次又一次地收到这个错误:
The compiler is unable to type-check this expression in reasonable time; try breaking up the expression into distinct sub-expressions
我在这里读了很多书,我知道将代码分解成更小的部分会有所帮助 - 但对于 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。
我建议为比萨添加一个 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)
.
我正在努力适应 swift 中的 MVVM 模式。所以我写了一些代码,然后一次又一次地收到这个错误:
The compiler is unable to type-check this expression in reasonable time; try breaking up the expression into distinct sub-expressions
我在这里读了很多书,我知道将代码分解成更小的部分会有所帮助 - 但对于 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。
我建议为比萨添加一个 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)
.