Xcode SwiftUI报'ContentView不符合View协议'等错误如何解决
问题根源
三个报错全部由括号闭合错位导致:scannerSheet计算属性本身没有正确闭合,导致后续的body属性被错误嵌套进scannerSheet内部,触发连锁编译错误:
- 「Type 'ContentView' does not conform to protocol 'View'」:View协议要求必须实现的
body属性没有定义在ContentView结构体的根层级,编译器找不到合规的body实现,判定不遵守协议 - 「Function declares an opaque return type, but has no return statements in its body from which to infer an underlying type」:
scannerSheet声明返回some View类型,但因为括号错位,编译器无法识别你要返回CodeScannerView实例,也找不到对应的return语句 - 「Result of 'CodeScannerView' initializer is unused」:括号错位后,编译器判定你只是创建了
CodeScannerView实例但没有返回/使用它,后续嵌套的body定义属于无效代码
修复后完整代码
import SwiftUI import CodeScanner struct ContentView: View { @State var isPresentingScanner = false @State var scannedCode: String = "Scan a QR code to get started." var scannerSheet : some View { CodeScannerView( codeTypes: [.qr], completion: { result in if case let .success(code) = result { self.scannedCode = code.string self.isPresentingScanner = false } } ) } // 补全scannerSheet计算属性的闭合括号,修正嵌套错误 var body: some View { VStack(spacing: 10) { Text(scannedCode) Button("Scan QR code") { self.isPresentingScanner = true } .sheet(isPresented: $isPresentingScanner) { self.scannerSheet } } } } struct ContentView_Previews: PreviewProvider { static var previews: some View { ContentView() } }
避坑提示
写SwiftUI代码时注意保持缩进对齐,点击Xcode编辑器里任意大括号,编辑器会高亮配对的另一半括号;写闭包、计算属性时写完开头括号就先补全结束括号,再往中间填内容,可以避免绝大多数括号错位问题。
内容的提问来源于stack exchange,提问作者Jay
相关产品推荐
相关产品推荐

