无法将Swift.UInt类型的值转换为Swift.UInt

时间:2017-02-06 21:24:18

标签: swift3

我正在尝试使用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)
        }
    }
}

rowDictionary<String, Any>调试器输出:

enter image description here

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()返回这个不透明值?

1 个答案:

答案 0 :(得分:0)

看起来这个库可能与你的应用程序在不同版本的Swift(3.0?)上。您可能需要使用最新版本的Xcode和Swift重新编译MySqlSwiftNative。