Я хочу sh создать UIViewRepresentable с представлениями SwiftUI в качестве подпредставления, и у меня есть следующий код, который можно вставить поверх ContentView пустого проекта SwiftUI в Xcode.
The enum Action
прямо сейчас имеет один случай, но является ловушкой для добавления дополнительных действий, которые будут выполняться в updateUIView()
.
import SwiftUI
struct LegacyView<Content: View>: UIViewRepresentable {
enum Action {
case idle
}
@Binding var action: Action
let content: Content
func makeCoordinator() -> Coordinator {
Coordinator(self)
}
func makeUIView(context: Context) -> UIView {
let hosting = UIHostingController(rootView: self.content)
let legacyView = UIView()
legacyView.addSubview(hosting.view)
hosting.view.autoresizingMask = [.flexibleWidth, .flexibleHeight]
return legacyView
}
func updateUIView(_ uiView: UIView, context: Context) {
}
class Coordinator: NSObject {
let parent: LegacyView
init(_ parent: LegacyView) {
self.parent = parent
}
}
}
struct ContentView: View {
var body: some View {
LegacyView(action: .constant(.idle)) {
Text("Hello, world!")
}
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
Однако в первой строке body
из ContentView
, Я получаю следующую ошибку: Enum case 'idle' requires that '() -> Text' conform to 'View'
. Как можно исправить эту ошибку?