无法将类型'__NSCFNumber'(0x25418e000)的值强制转换为'NSString'

时间:2019-08-26 16:40:11

标签: ios swift

我将Mac OS和Xcode从7更新到11.1,将Swift 2.2更新到Swift 4后,在存储在aWords:String中的查询中得到标题错误: 以前该代码在swift 2.2中可以完美运行,但是现在此查询给出了一个错误,并且没有得到解决。 查询访问数据库获取国家和城市名称,然后获取纬度和经度。


    func updateSearchResults(for searchController: UISearchController)
    {
        if searchController.searchBar.text == ""
        {
            return
        }
        self.openDatabase()
        filteredResults.removeAllObjects()
        if let wordsResultSet = database.executeQuery(
            "SELECT * FROM citiesTable,country  WHERE country.country_id = 
    citiesTable.country_id and cityName LIKE '\
    (searchController.searchBar.text!)%' LIMIT 50", withArgumentsIn: nil)

        {
            while wordsResultSet.next()
            {
        let aWord: String =  (wordsResultSet["cityName"] as! String) + " , 
" + (wordsResultSet["name"] as! String) +  "-$-" +
            (wordsResultSet["latitude"] as! String) + "-$-" +  
(wordsResultSet["longitude"] as! String)

                filteredResults.add(aWord)
            }
        } else {
            print("select failed: \(String(describing: database.lastErrorMessage()))")
        }

        database.close()
        self.tableVw.reloadData()

    }

代码中的错误信息 enter image description here swift 2.2中代码的先前工作输出为:

this

1 个答案:

答案 0 :(得分:1)

错误#1

  

无法将类型'__NSCFNumber'(0x25418e000)的值强制转换为'NSString'

解决方案:

将纬度和经度设为Double


错误#2

  

编译器无法在合理的时间对该表达式进行类型检查;尝试将表达式分成不同的子表达式

解决方案:

将字典值分配给变量,然后使用Sting插值将字符串连接起来


let city = wordsResultSet["cityName"] as! String
let name = wordsResultSet["name"] as! String
let latitude = wordsResultSet["latitude"] as! Double
let longitude = wordsResultSet["longitude"] as! Double

let aWord = "\(city) , \(name)-$-\(latitude)-$-\(longitude)"