【问题标题】:How to understand the some("a value") in Swift 4.1如何理解 Swift 4.1 中的 some("a value")
【发布时间】:2026-02-03 07:15:01
【问题描述】:

这是我的 Xcode Playground 的截图:

如您所见,str 打印为some("Hello")。这真的让我很困惑,因为似乎没有关于它的文档。

有人对此some()有一个很好的解释吗?


系统信息:

  • swift -版本:4.1.2

  • Xcode:9.4.1

【问题讨论】:

  • 你知道Optional 是干什么用的吗?
  • @nayem,是的。但我对打印some() 有点困惑。

标签: swift4.1


【解决方案1】:

这似乎是 print 对于此编译器的一个怪癖,纯粹推测它可能是更改隐式展开的可选选项的语义的人工制品,请参阅 Abolish ImplicitlyUnwrappedOptional type

Optional 类型是,剥离到基础,定义为:

enum Optional<Wrapped>
{
   case none
   case some(Wrapped)
}

通常,如果您使用print()enum,您会得到文字,这里是nonesome(),但是print() 通常将可选值打印为nilOptional()

似乎在 Xcode 9.4.1 中(至少)隐式展开的选项被打印为选项但没有特殊的大小写,而 Xcode 9.2(至少)按预期打印展开的值(因为它是隐式展开的) .

在 9.4.1 中,对于隐式展开的可选项,可能还有其他有趣的行为。您应该在 Xcode 10 Beta 中进行测试和/或报告 9.4.1 中的错误 (bugreport.apple.com),然后看看 Apple 怎么说。

【讨论】:

  • 你是对的。我在 Xcode 10 beta 2 上试过这个。打印是Optional("Hello")
  • @0xa6a - 那时可能不值得提交针对 9.4.1 的错误。当然,由于 Swift 是一个移动的目标,我不确定它是否有错误,只是某个时间点的行为;-)