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