这些Swift错误消息是什么意思?(函数声明了一个不透明的返回类型..)



我有一个简单的Swift结构(这恰好是SwiftUI(

这是原作。。。

struct ContentView: View {
var body: some View {
Text("Hello, World!")
}
}

如果我添加一个简单的赋值语句,比如这样,我会得到一堆错误:

struct ContentView: View {
var body: some View {
let x = 1
Text("Hello, World!")
}
}

为什么我会收到这些错误消息?它们是什么意思?(我理解#2,但我不理解#1&#3(为什么我在添加了一个简单的赋值语句后会收到这些消息?

  1. 函数声明了一个不透明的类型,但在其主体中没有返回语句来推断底层类型
  2. 从未使用过不可变值"x"的初始化;考虑用对"_"的赋值替换或删除它
  3. "Text"初始值设定项的结果未使用

在第一段代码中,您将利用单表达式闭包的隐式返回。这意味着,若闭包只包含一行,编译器会隐式返回该行的值。然而,如果您的闭包较长,则需要显式编写return

struct ContentView: View {
var body: some View {
let x = 1
return Text("Hello, World!")
}
}

另外两个只是警告,它们的意思是一样的:你声明了一些东西,但永远不要使用它。你永远不会使用x,而且由于你不再利用闭包的隐式返回,你也永远不会使用Text

Swift 5的一个新特性是,如果方法/计算属性仅由一个返回语句组成,我们可以省略单词return。所以这个:

func f() -> Int {
return 1
}

可以简化为:

func f() -> Int {
1
}

因此,如果我们扩展第一个代码片段,它就会变成:

var body: some View {
// the word "return" is implicitly added
return Text("Hello, World!")
}

这是一个称为body的计算属性。

当您再添加一行时,computed属性不再仅由一个返回语句组成,因此现在不能省略单词return。编译器试图找到返回语句,但找不到,因此出现错误#1。

由于编译器不知道您实际上与returnText(...)绑定,因此会混淆您为什么调用初始化程序而不使用它,因此出现错误#3。

相关内容

最新更新