如何修复“函数声明了一个不透明的返回类型,但在其主体中没有返回语句来推断基础类型”错误?

Posted

技术标签:

【中文标题】如何修复“函数声明了一个不透明的返回类型,但在其主体中没有返回语句来推断基础类型”错误?【英文标题】:How do I fix the "Function declares an opaque return type, but has no return statements in its body from which to infer an underlying type" error? 【发布时间】:2019-07-01 03:52:31 【问题描述】:
struct ContentView: View 
  var body: some View 
    Print("Hello World")
  

每当我尝试在操作之外使用诸如打印或 if 语句或类似的东西(例如使用 UserDefaults 保存另一个示例的设置)时,它都会给我“函数声明一个不透明的返回类型”,但有在它的主体中没有返回语句来推断基础类型”。

使用UIKit,您在viewDidLoad() 中放入的任何东西都可以完美运行,那么SwiftUI 是否有类似viewDidLoad() 的东西?如果不是,我将如何执行这些操作(在您说将它们从体内取出并将它们放入 ContentView 之前,这只会给我“预期声明”错误)?

【问题讨论】:

你需要返回一个视图。 @matt 你是什么意思?可以举个例子吗? 例如:print("hello world"); return Text("hello world") 你不能在 SwiftUI body 中随便说什么。这是一种特定领域的语言。这不是旧的 Swift。 这不是可可。这是一个完全不同的范式。观看视频并完成教程。 【参考方案1】:

如前所述,视图的主体,必须返回一个视图:

struct ContentView : View 
    var body: some View 
        return Text("Hello World")
    

此外,在定义主体时有大量的限制。

没有办法解决它。您需要阅读文档,或者至少遵循 Apple 提供的这些教程,它们的组合非常好:

https://developer.apple.com/tutorials/swiftui/tutorials

【讨论】:

***.com/a/56830108/10919715 想出了一个办法,它实际上比看起来简单得多。 UIKit 没有等价物,并且视图周期完全不同。您需要阅读文档,否则您会遇到各种意外的编译器错误。使用 SwiftUI 错误消息完全具有误导性,并且很多时候它们会被报告在错误的位置。例如,它可能会告诉您代码开头有错误,而问题实际上是下面的 300 行代码。 @kontiki 哪个文档?我发现 Apple 开发者文档非常稀少。【参考方案2】:
import SwiftUI

struct ContentView : View 
    var body: some View 
        var bodyView: some View 
            Text("Hello World")
        
        //Put your entire UI in the bodyView, between the bodyView and "return bodyView" you can put what you would as if it was a viewDidLoad() like in UIKit.
        return bodyView
    


#if DEBUG
struct ContentView_Previews : PreviewProvider 
    static var previews: some View 
        ContentView()
    

#endif

【讨论】:

完全不清楚为什么你首先需要bodyView而不是直接使用body 将与视图无关的代码注入body 属性并不是 SwiftUI 的工作方式

以上是关于如何修复“函数声明了一个不透明的返回类型,但在其主体中没有返回语句来推断基础类型”错误?的主要内容,如果未能解决你的问题,请参考以下文章

如何修复漏洞

如何修复WMI

PHP网站漏洞怎么修复 如何修补网站程序代码漏洞

如何修复这些漏洞? (npm audit fix 无法修复这些漏洞)

如何修复AppScan漏洞

如何在DOS环境下修复系统