swift - 如何在运行时选择正确的 Int 类型
问题描述
我正在尝试确定要在运行时使用的正确 Int 类型。
本质上,我正在尝试做这样的事情:
func sizeToType<T>(size:UInt8) throws -> T.Type {
switch size {
case 1:
return UInt8.self
case 2:
return UInt16.self
case 4:
return UInt32.self
case 8:
return UInt64.self
default:
throw MyError.runtimeError("Incorrect size")
}
但这不会编译,并迫使我这样写:
func UTILtoType<T : FixedWidthInteger>(size:UInt8) throws -> T.Type {
switch size {
case 1:
return UInt8.self as! T.Type
case 2:
return UInt16.self as! T.Type
case 4:
return UInt32.self as! T.Type
case 8:
return UInt64.self as! T.Type
default:
throw MyError.runtimeError("Incorrect size")
}
但我担心后者实际上不会像我预期的那样工作。我不希望我的 UInt8 被“向上转换”为 Int。
这样做的正确方法是什么?
编辑:回答我想要完成的问题。我的最终目标是拥有一个看起来像这样的函数(我正在努力使这项工作,我知道这不会按原样编译):
static func parseInt<T : FixedWidthInteger> (unsafeRawPointer:UnsafeRawPointer, stride: Int, from:Int, length:Int) -> T {
var res : UTILtoType(size:length) = 0
for x in 0..<length {
res += (unsafeRawPointer.advanced(by:(from + x) * stride).load(as:UTILtoType(size:length).self))
}
return res
}
这样我最终就可以简单地调用:
let a = parseInt(unsafeRawPointer:pointer, stride:1, from:0, len:2)
这将创建 aUInt16
并将其分配给a
,其类型为UInt16
。指定长度和 对我来说似乎是多余的UInt16
,所以我希望我能推断出类型。
解决方案
推荐阅读
- angular - typeerror 无法读取未定义的属性“匹配” - Angular
- git - 执行 Jenkins Pipeline 时出现异常:原因:java.io.NotSerializableException:groovy.json.internal.LazyMap
- python - 如果用户输入中的“字符串”为什么是 Python:无论我在用户输入中输入什么,它总是有效?
- java - maven javadoc:fix 无法自动修复文档
- python - get_context_data 变量未显示在 HTML 文件中
- javascript - 图表仅在我最后写 enter() 时更新
- c# - Blazor WebSocket 正在从某些 IP 地址停止
- database - 您可以将 Realm Sync 与 M0 层 MongoDB 集群一起使用吗?
- flutter - 在列表平铺中垂直放置两个尾随图标
- python - 将 .m4a 文件转换为 .mp3 时出现此错误