首页 > 解决方案 > 如何将“Int8?”转换为“Int?”?

问题描述

我有一个UInt8?名为的变量seconds,我需要将它传递给一个接受Int?.

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

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

Int?(seconds)

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

我当然可以:

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

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

标签: iosswiftcastingoptional

解决方案


你的类型是Optional<UInt8>。AUInt8总是可以Int用函数转换为 a Int.init。但由于它被包裹在一个 中Optional,你必须将该函数映射到可选函数上,从而产生一个新的 type 值Optional<Int>

seconds.map(Int.init)

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


推荐阅读