如何将 `Int8?` 转换为 `Int?`?

How to cast `Int8?` to `Int?`?

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

的函数

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

这意味着我必须施法,所以我尝试了显而易见的方法:

Int?(seconds)

但这会导致:UInt8? 无法转换为 Int

当然可以:

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

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

您的类型是Optional<UInt8>UInt8 总是可以用函数 Int.init 转换为 Int。但是因为它被包裹在 Optional 中,你必须将该函数映射到可选的,产生一个类型为 Optional<Int>:

的新值
seconds.map(Int.init)

Optional.map(_:) and its companion flatMap 通常使使用可选值更容易。