Swift中如何将Optional<Double>转换为Optional<Int>
Swift 可选Double转可选Int的处理方案
Swift 没有专门的内置方法直接把 Double? 转成 Int?,但不用自己写扩展,用标准库自带的可选类型 map 方法就能实现你要的效果:非nil的Double会被转成对应的Int,nil还是保持nil。
具体用法
直接用map包裹Int初始化器就行:
// 非nil的情况 let someDouble: Double? = 4.7 let someInt = someDouble.map(Int.init) // someInt 是 Optional(4) // nil的情况 let nilDouble: Double? = nil let nilInt = nilDouble.map(Int.init) // nilInt 是 nil
为什么直接用Int()会报错?
你遇到的Value of optional type 'Double?' must be unwrapped to a value of type 'Double'错误,是因为Int的初始化器只接受非可选的Double值,可选类型必须先解包才能传进去,而map方法会自动帮你处理解包:如果可选值是nil,map直接返回nil;如果有值,就把值传给闭包里的Int.init做转换。
另一种写法:可选绑定
要是你更习惯用可选绑定,也能达到同样效果,但map的写法更简洁:
let optionalDouble: Double? = 6.1 var optionalInt: Int? if let unwrappedDouble = optionalDouble { optionalInt = Int(unwrappedDouble) } // optionalInt 是 Optional(6)
内容的提问来源于stack exchange,提问作者ocuke
相关产品推荐
相关产品推荐

