在我的SwiftUI应用中,我在屏幕底部有一个Tab视图,为了保持代码的简洁,我想让每个Tab都在一个单独的视图类中。在一个Tab中,我有列表。由于某些原因,我不能将列表移动到一个单独的视图中。这是我最初的代码:导入SwiftUI。
struct ContentView: View {
var rooms : [Rooms] = []
@State var selectedView = 1
var body: some View {
VStack {
TabView() {
List(rooms) { rooms in
Image(systemName: "heart.fill")
HStack {
VStack(alignment: .leading) {
Text(rooms.name)
.font(.headline)
Text("members")
.font(.body)
}
}
}.tabItem { Image(systemName: "waveform.path.ecg") }.tag(1)
ExtractedView().tabItem { Text("Tab Label 2") }.tag(2)
}
}
}
}
这是我试图使一个单独的视图。
struct ContentView: View {
var rooms : [Rooms] = []
@State var selectedView = 1
var body: some View {
VStack {
TabView() {
ExtractedView1(rooms: rooms).tabItem { Image(systemName: "waveform.path.ecg") }.tag(1)
ExtractedView2().tabItem { Text("Tab Label 2") }.tag(2)
}
}
}
}
struct ExtractedView1: View {
let rooms : Rooms
var body: some View {
List(rooms) { rooms in
Image(systemName: "heart.fill")
HStack {
VStack(alignment: .leading) {
Text(rooms.name)
.font(.headline)
Text("members")
.font(.body)
}
}
}
}
}
知道为什么会出错吗?我得到以下错误。
错误1: [Rooms]不能转换为Rooms。
错误2:无法推断出通用参数 "SelectionValue"。
如果有这个建议,我甚至会把它移到不同的swift文件中。
看起来有一些混淆之间的数组的客房。[Room]
和一个单一的 Room
对象数据类型。只要确保你的List视图能够接受一个Room的数组。[Room]
这样它就可以在它们之间迭代
struct Room: Identifiable {
let id = UUID()
let name: String
}
struct ContentView: View {
var rooms : [Room] = []
@State var selectedView = 1
var body: some View {
VStack {
TabView() {
ExtractedView1(rooms: rooms).tabItem { Image(systemName: "waveform.path.ecg") }.tag(1)
ExtractedView2().tabItem { Text("Tab Label 2") }.tag(2)
}
}
}
}
struct ExtractedView1: View {
let rooms : [Room]
var body: some View {
List(rooms) { room in
Image(systemName: "heart.fill")
HStack {
VStack(alignment: .leading) {
Text(room.name)
.font(.headline)
Text("members")
.font(.body)
}
}
}
}
}
struct ExtractedView2: View {
var body: some View {
Text("ExtractedView2")
}
}