作者热门文章
- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我想将可选的 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) }
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/
我正在尝试用 Swift 编写这段 JavaScript 代码:k_combinations 到目前为止,我在 Swift 中有这个: import Foundation import Cocoa e
我是一名优秀的程序员,十分优秀!