【问题标题】:How to cast `Int8?` to `Int?`?如何将“Int8?”转换为“Int?”?
【发布时间】:2019-12-22 17:13:57
【问题描述】:

我有一个名为 secondsUInt8? 变量,我需要将其传递给接受 Int? 的函数。

这导致无法将 UInt8? 类型的值转换为预期的参数类型 Int?

这意味着我必须投射,所以我尝试了显而易见的:

Int?(seconds)

但这会导致:UInt8? 不能转换为 Int

当然可以:

(seconds == nil) ? nil : Int(seconds!)

但是WTF,真的有必要这么做作吗?

【问题讨论】:

  • “真的有必要这么做作吗?”不:)

标签: ios swift casting optional


【解决方案1】:

您的类型是Optional<UInt8>UInt8 始终可以使用函数Int.init 转换为Int。但由于它包含在 Optional 中,因此您必须将该函数映射到可选函数上,从而生成 Optional<Int> 类型的新值:

seconds.map(Int.init)

Optional.map(_:) 和它的伙伴flatMap 通常使使用可选项更容易。

【讨论】:

  • 谢谢! “在可选功能上映射该功能”到底是什么意思?你能详细说明一下吗?另外,您还可以用Optional.map(_:) 做什么其他事情;你知道一个好的教程吗?
  • Optional 是一个函子。这是函数式编程的一个术语。函子是一种可以被映射的类型。我确定您熟悉将函数映射到数组。数组也是函子。 Optional 在容器的意义上是相似的,即它要么包含一个值,要么不包含。当它这样做时,您传递给它的函数(或闭包)将应用于包含的值。 This 可能会有所帮助
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-12-17
  • 2015-02-12
  • 2014-05-22
  • 1970-01-01
  • 2018-10-21
  • 2016-12-02
  • 2017-06-14
相关资源
最近更新 更多