gpt4 book ai didi

swift - 如何从可选的 Int 初始化可选的 UInt?

转载 作者:可可西里 更新时间:2023-10-31 23:57:23 28 4
gpt4 key购买 nike

我想将可选的 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?(_ number : Int?) {
if let number = number {
self = UInt(number)
}
}
}

有没有一种方法可以将 Int? 转换为 UInt? 而无需使用扩展或条件检查(if, guard)?

最佳答案

您可以 map可选的:

var optionalNumber : Int?

//later in code
let optionalPositiveNumber = optionalNumber.map { UInt($0) }

来自documentation:

Evaluates the given closure when this Optional instance is not nil, passing the unwrapped value as a parameter.

func map<U>(_ transform: (Wrapped) throws -> U) rethrows -> U?

所以结果是 UInt?根据要求,可以是 nil或转换后的有符号数。

请注意,转换将失败(并因运行时异常而崩溃)如果给定的数字是负数。如果这是一个问题,一个更好的变体可能是

let optionalPositiveNumber = optionalNumber.flatMap { UInt(exactly: $0) }

返回 nil如果给定的数字是 nil或否定。

关于swift - 如何从可选的 Int 初始化可选的 UInt?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50620840/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com