Swift 如何从可选Int初始化可选UInt?
我想将可选Int转换为可选UInt:Swift 如何从可选Int初始化可选UInt?,swift,type-conversion,optional,Swift,Type Conversion,Optional,我想将可选Int转换为可选UInt: let optionalNumber : Int? //later in code let optionalPositiveNumber = UInt(optionalNumber) 给出了错误: Cannot invoke initializer for type 'Uint' with an argument list of type (Int?) 我可以通过创建以下UInt扩展来解决此问题: extension UInt { init?(_
let optionalNumber : Int?
//later in code
let optionalPositiveNumber = UInt(optionalNumber)
给出了错误:
Cannot invoke initializer for type 'Uint' with an argument list of type (Int?)
我可以通过创建以下UInt扩展来解决此问题:
extension UInt {
init?(_ number : Int?) {
if let number = number {
self = UInt(number)
}
}
}
是否有一种方法可以将
Int?
转换为UInt?
,而无需使用扩展名或条件检查(if,guard)您可以使用?创建它,如果它为nil,则传递默认值
let optionalPositiveNumber = UInt(optionalNumber ?? 0)
因此,如果您的optionalNumber为零,它将初始化为0
编辑建议人
如果作为source
传递的值不能准确表示,则返回结果
是nil
您可以
map
var optionalNumber : Int?
//later in code
let optionalPositiveNumber = optionalNumber.map { UInt($0) }
从
当此可选实例不是nil时,计算给定的闭包,并将未包装的值作为参数传递
func映射(uTransform:(Wrapped)抛出->U)再抛出->U?
因此,结果是请求的UInt?
,或者是nil
,或者是转换后的有符号数
请注意,转换将失败(并因运行时异常而崩溃)
如果给定的数字是负数。如果这是一个问题,一个更好的变体
可能是
如果给定的数字是
nil
或负值,则返回nil
。??也是一个条件。@U.Benlice它将用于nilYes的情况,我知道。但他想要一个无条件的解决方案。首先这是一个条件。此外,您的解决方案不会生成可选UInt。您正在以零为单位创建零值。让optionalPositionEnumber=UInt(确切地说:optionalNumber???-1)
nil
将映射为nil
,负数将为nil
。请尝试我建议的代码。如果原始数字为正数,则会得到一个具有预期值的UInt?
。如果原始数字为负数或nil
,它将为您提供nil
。
var optionalNumber : Int?
//later in code
let optionalPositiveNumber = optionalNumber.map { UInt($0) }
let optionalPositiveNumber = optionalNumber.flatMap { UInt(exactly: $0) }