我开始在一个新的干净项目中试验 SwiftUI 的东西。
在这个新项目中,创建了一个符合UIViewRepresentable的结构。这个想法是在 SwiftUI 视图中嵌入一个 UIKit 视图。一切正常。
import SwiftUI
struct ExempleFromSwitfUIBasedProject: View {
@State var text = "Hello World"
var body: some View {
VStack {
TextView(text: $text)
.frame(minWidth: 0, maxWidth: .infinity, minHeight: 0, maxHeight: 44.0)
}
}
}
struct TextView: UIViewRepresentable {
@Binding var text: String
func makeUIView(context: Context) -> UITextView {
return UITextView()
}
func updateUIView(_ uiView: UITextView, context: Context) {
uiView.text = text
uiView.backgroundColor = UIColor.red
}
}
struct ExempleFromSwitfUIBasedProject_Previews: PreviewProvider {
static var previews: some View {
ExempleFromSwitfUIBasedProject()
}
}
在我的 IDE 中可见的相同代码显示没有触发错误
当我尝试在我的旧项目中嵌入完全相同的代码(文件的复制/粘贴)时,问题出现了。
这导致我出现以下错误:
类型“TextView”不符合协议“UIViewRepresentable”
import SwiftUI
struct ExempleFromLegacyBasedProject: View {
@State var text = "Hello World"
var body: some View {
VStack {
TextView(text: $text)
.frame(minWidth: 0, maxWidth: .infinity, minHeight: 0, maxHeight: 44.0)
}
}
}
struct TextView: UIViewRepresentable {
@Binding var text: String
func makeUIView(context: Context) -> UITextView {
return UITextView()
}
func updateUIView(_ uiView: UITextView, context: Context) {
uiView.text = text
uiView.backgroundColor = UIColor.red
}
}
struct ExempleFromSwitfUIBasedProject_Previews: PreviewProvider {
static var previews: some View {
ExempleFromLegacyBasedProject()
}
}
在我的 IDE 中可见相同的代码以显示触发的错误
总结一下: 在一个干净的项目中,我使用“UIViewRepresentable”协议没有任何问题。在几年前创建的遗留项目中,我只是复制了同一个文件,这引发了编译错误。
这两个项目都有一个最小部署目标 >= iOS 13。
谢谢你的帮助