У меня есть представление, которое представляет строку в ячейке, которая выглядит следующим образом

Это хорошо работает, но три горизонтальных элемента (изображение, Заголовок / Подзаголовок, Изображение) жестко закодированы для их соответствующих типов.
Я хотел бы иметь универсальный c ThreeItemView
, который может занять 3 Views
любого типа и расположить их, как показано. Это позволило бы мне повторно использовать ту же компоновку контейнера с любыми другими типами представлений.
Я создал представление, которое занимает три @ViewBuilders
:
import Foundation
import SwiftUI
struct ThreeItemView<Start: View, Main: View, End: View>: View {
let start: () -> Start
let main: () -> Main
let end: () -> End
init(@ViewBuilder start: @escaping() -> Start,
@ViewBuilder main: @escaping() -> Main,
@ViewBuilder end: @escaping() -> End) {
self.start = start
self.main = main
self.end = end
}
var body: some View {
return HStack {
start()
main()
.frame(minWidth: 0, maxWidth: .infinity, maxHeight: .infinity, alignment: .leading)
end()
}
.frame(minWidth: 0, maxWidth: .infinity, maxHeight: 60, alignment: .leading)
}
}
struct ThreeItemContainer_Previews: PreviewProvider {
static var previews: some View {
ThreeItemView(start: {
Image(systemName: "envelope.fill")
}, main: {
Text("Main")
}, end: {
Image(systemName: "chevron.right")
})
}
}
Это работает, как и ожидалось, но API немного .. громоздко Какой способ облегчить использование ThreeItemView
?