我将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()
}
答案 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)"