Обновление: работает следующий вариант
struct ButtonContainer{
let label: VStack<TupleView<(Image, Text)>>
let action: ()-> Void
init(_ text: String, systemName: String, action: @escaping ()-> Void){
self.label = VStack {
Image(systemName: "\(systemName)") // << make it string literal !!!
Text(text)
}
self.action = action
}
}
Начальный (на всякий случай):
Учитывая, что SwiftUI использует почти везде непрозрачные типы some View
, подход с типом стирания для label
скомпилирован и хорошо работает (проверено с Xcode 11.3.1 / iOS 13.3). Я не уверен, что вам нужно иметь явный тип здесь, но просто помните.
struct ButtonContainer{
let label: AnyView
let action: ()-> Void
init(_ text: String, systemName: String, action: @escaping ()-> Void){
self.label = AnyView(VStack {
Image(systemName: systemName)
Text(text)
})
self.action = action
}
}