我正在尝试使用MySqlSwiftNative版本1.0.10编写一个小型Swift程序来读取MySQL数据库。我正在使用Swift 3.0.2,我遇到了向下转换Dictionary值的问题。
if let results = try query.readAllRows() {
for row in results[0] {
if let id = row["id"] { // as? UInt {
print(id as! UInt)
}
}
}
row
是Dictionary<String, Any>
调试器输出:
print语句产生以下错误:
无法将“Swift.UInt”类型的值(0x100be8340)转换为 'Swift.UInt'(0x1003ac960)
为什么会失败?
更新
我在返回ResultSet数组之前向MySQLDriver function func readAllRows() throws -> [ResultSet]?
添加了一个print语句。
for row in arr[0] {
if let id = row["id"] {
print("\(id) \(type(of: id))")
}
}
此输出
1 UInt
看起来不错。所以我修改了我的代码以打印相同的东西。
if let results = try query.readAllRows() {
for row in results[0] {
if let id = row["id"] { // as? UInt {
print("\(id) \(type(of: id))")
}
}
}
此输出
UInt(_value :(不透明值))UInt
所以这可以解释为什么演员表失败了,但为什么我从readAllRows()
返回这个不透明值?
答案 0 :(得分:0)
看起来这个库可能与你的应用程序在不同版本的Swift(3.0?)上。您可能需要使用最新版本的Xcode和Swift重新编译MySqlSwiftNative。