无法将 'Swift.UInt32' 类型的值转换为 'Swift.Int'
Could not cast value of type 'Swift.UInt32' to 'Swift.Int'
在测试项目中,我得到了带有一些测试辅助函数的扩展。像这样:
extension Employee {
static func mockDict() -> Dictionary<String, Any>! {
return ["ID": arc4random() % 1000,
"FirstName": "Employee First Name",
...]
}
}
(我删除了不必要的代码)。由于某些未知原因,我无法从此词典访问 ID。投射时我有 SIGABRT 6
employeeDict["ID"] as! Int
Xcode 调试器控制台也不喜欢这个特定的整数:
字符串工作正常。你遇到过这样的问题吗?有什么想法吗?
编辑:以防万一有人也会遇到这个问题。从 UInt32/Int32 到 Int 的转换设计失败。即使对象被转换为 Any
或 Anyobject
之间。
尽管
@available(*, message: "Converting UInt32 to Int will always succeed.")
public init?(exactly value: UInt32)
在 Int 的声明中
public struct Int : SignedInteger, Comparable, Equatable {
...
}
和
public struct Int32 : SignedInteger, Comparable, Equatable {
...
}
EDIT 2 对于那些可能在 JSON 序列化中遇到此行为的人。是的,如果要求序列化 UInt32、Int64 或除 Int
以外的任何 Integer 协议实例,序列化将失败并显示错误 NSInvalidArgumentException
Invalid type in JSON write (_SwiftValue)
试试这个:
let a = employeeDict["ID"] as! UInt32
let number = Int(a)
现在您可以使用 number
执行任何操作。
Swift "primitive" 数字类型不可互换,不能相互转换。
您需要使用初始化程序。
因为 arcRandom()
returns UInt32
并且您想使用值作为 Int
,立即在字典声明中转换它:
["ID": Int(arc4random() % 1000), ...
PS: 不要 将一个明显的非可选声明为隐式解包可选 return 值,这会破坏 [=28 的强类型系统=].
static func mockDict() -> Dictionary<String, Any>
这对我有用:
Int("\(employeeDict["ID"]!)")
在测试项目中,我得到了带有一些测试辅助函数的扩展。像这样:
extension Employee {
static func mockDict() -> Dictionary<String, Any>! {
return ["ID": arc4random() % 1000,
"FirstName": "Employee First Name",
...]
}
}
(我删除了不必要的代码)。由于某些未知原因,我无法从此词典访问 ID。投射时我有 SIGABRT 6
employeeDict["ID"] as! Int
Xcode 调试器控制台也不喜欢这个特定的整数:
字符串工作正常。你遇到过这样的问题吗?有什么想法吗?
编辑:以防万一有人也会遇到这个问题。从 UInt32/Int32 到 Int 的转换设计失败。即使对象被转换为 Any
或 Anyobject
之间。
尽管
@available(*, message: "Converting UInt32 to Int will always succeed.")
public init?(exactly value: UInt32)
在 Int 的声明中
public struct Int : SignedInteger, Comparable, Equatable {
...
}
和
public struct Int32 : SignedInteger, Comparable, Equatable {
...
}
EDIT 2 对于那些可能在 JSON 序列化中遇到此行为的人。是的,如果要求序列化 UInt32、Int64 或除 Int
以外的任何 Integer 协议实例,序列化将失败并显示错误NSInvalidArgumentException
Invalid type in JSON write (_SwiftValue)
试试这个:
let a = employeeDict["ID"] as! UInt32
let number = Int(a)
现在您可以使用 number
执行任何操作。
Swift "primitive" 数字类型不可互换,不能相互转换。
您需要使用初始化程序。
因为 arcRandom()
returns UInt32
并且您想使用值作为 Int
,立即在字典声明中转换它:
["ID": Int(arc4random() % 1000), ...
PS: 不要 将一个明显的非可选声明为隐式解包可选 return 值,这会破坏 [=28 的强类型系统=].
static func mockDict() -> Dictionary<String, Any>
这对我有用:
Int("\(employeeDict["ID"]!)")