我有两个数组。
maschineItems: [MaschineItem]
maschines: [Maschine]
两个对象都具有属性“名称”
在我的视图中,我想检查机器数组中是否存在 maschineItem 的名称。我想为机器中存在的所有 maschineItems 制作一个“light Bubble”,为机器中不存在的所有 maschineItems 创建一个“dark Bubble”。
这是我的代码(有效):
import SwiftUI
import Combine
struct OverviewView: View {
@FetchRequest(fetchRequest: MaschineItem.getAllMaschines()) var maschineItems:FetchedResults<MaschineItem>
@State var networkManager = NetworkManager()
var body: some View {
NavigationView{
ScrollView{
VStack(spacing: 30) {
ForEach(maschineItems) { maschineItem in
if NetworkManager.maschines.contains(where: {$0.name == maschineItem.name}) {
BubbleView(locationText: "TEST LOCATION", textIo: "/", textnIo: "/", maschineItem: maschineItem, color: .dividerBackground, opacity: 0.25)
}else {
BubbleView(locationText: "Unknown device", textIo: "/", textnIo: "/", maschineItem: maschineItem, color: .gray, opacity: 0.5)
}
}
}
}
.navigationBarTitle("Übersicht", displayMode: .large)
}
}
现在我想让 Bubbles 包含有关机器的信息。所以我必须在 if 语句之前初始化匹配,不是吗?但是当我这样做时:
var body: some View {
NavigationView{
ScrollView{
VStack(spacing: 30) {
ForEach(maschineItems) { maschineItem in
if let maschines = NetworkManager.maschines.first(where: {$0.name == maschineItem.name}) {
BubbleView(locationText: "\(maschines.location.building) / \(maschines.location.workcell)", textIo: "\(maschines.resultCountiO)", textnIo: "\(maschines.location.resultCountniO)", maschineItem: maschineItem, color: .dividerBackground, opacity: 0.5)
}else {
BubbleView(locationText: "Unknown device", textIo: "/", textnIo: "/", maschineItem: maschineItem, color: .gray, opacity: 0.5)
}
}
}
}
.navigationBarTitle("Übersicht", displayMode: .large)
}
}
我在 if 语句的行中收到以下错误:
Closure containing control flow statement cannot be used with function builder 'ViewBuilder'
我该如何解决这个问题?我进行了很多研究,发现了类似的线程,这表明我必须使用该array.first(where: {})
方法,但我没有发现任何可以帮助我解决这个问题的方法。是的,我试图创建一个函数,因为视图中的逻辑是错误的。但是当我将所有这些都写在一个函数中时,就会发生同样的错误。
我真的很感谢所有试图帮助我的人。PS:我是德国人,对不起英语:D