【问题标题】:Why does Swift accept code that should return a tuple, but instead returns a string?为什么 Swift 接受应该返回元组的代码,而是返回一个字符串?
【发布时间】:2020-03-10 22:56:17
【问题描述】:

在下面的代码中,我希望 Xcode 不接受,因为我在代码主体中使用字符串作为返回值,而不是元组。但是由于某种原因,Xcode 没有返回错误。这是为什么呢?

func test(name: String) -> (String) {
    return name
}

【问题讨论】:

标签: swift string function return tuples


【解决方案1】:

对于 0 或 1 个元素的元组有特殊处理。就类型系统而言:

  • () 等价于 Void()
  • (T) 等价于 T

【讨论】:

  • 啊,这段代码不会中断,因为它被编写为从不接受“name”参数中的多个元素?我想知道我是否应该避免使用这种语法,因为它看起来很草率,或者它在某些时候是否真的很有价值。
  • 什么是Void()?你的意思是Void
  • @John 你问题的前半部分我完全没看懂,至于后半部分,写func test(name: String) -> String就行了。
  • @MartinR 试试看。 func f(_ void: Void) {}; f(Void()) void 是一个类型,不能直接使用。你可以使用Void()(但不是Void.init(),有趣的是)来实例化它,或者使用Void.sef作为元类型,但你不能直接使用它。
  • @DávidPásztor 一些混淆源于() 既是类型(空元组)又是值(空元组的唯一可能实例)。 return () 是有道理的,因为它正在返回一个值。 return Void 不起作用是有道理的,因为它指的是 () 类型,而不是 () 值,类似于 return type(of: ())。另一种行为仍然令人困惑。我在论坛上问过:forums.swift.org/t/why-is-illegal/30795?u=alexanderm
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-12-21
  • 1970-01-01
  • 1970-01-01
  • 2020-04-08
  • 2023-04-01
  • 1970-01-01
相关资源
最近更新 更多