【发布时间】:2020-02-06 18:30:24
【问题描述】:
我希望创建一个带有 SwiftUI 视图的 UIViewRepresentable 作为子视图,我有以下代码,可以将其粘贴到 Xcode 中空 SwiftUI 项目的 ContentView 上。
enum Action 现在只有一个 case,但它是一个钩子,用于添加将在 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()
}
}
但是在ContentView 的body 的第一行,我收到以下错误:Enum case 'idle' requires that '() -> Text' conform to 'View'。如何解决此错误?
【问题讨论】: