我正在努力制作一个用Swift 2编写的旧应用程序,更新到最新功能,最重要的是,转换为Swift 3以便为iOS 11和Swift 4做准备(即使它已经准备好了)已经很晚了。)
我在翻译过程中遗留了一些错误,但这是我无法修复的错误。
以下是来自我的刷新favorites
方法的错误:
fileprivate func checkFavorites() {
if !DataUtils.isBackgroundRefreshInProgress() {
let ids = favoritesTableViewController!.favoriteCityList?.map({ $0.id })
if let ids = ids, ids.count > 0 {
DataUtils.refreshCity(ids) { () -> Void in
self.favoritesTableViewController.refresh()
})
}
}
}
以下是一些有关变量的原型和信息:
var favoriteCityList: Results<City>?
显然你会注意到我正在使用Realm。
以下是方法refreshCity
的原型:
class func refreshCity(cityIds: [Int], withHandler: @escaping (() -> Void)) {}
这是我在这一行得到的错误:
DataUtils.refreshCity(ids) { () -> Void in
无法转换
类型的值'LazyMapRandomAccessCollection<Results<City>, Int>' to expected element type Int
当我使用List<>
或Result<>
容器时,我应该在原型方法中更改哪些内容?
答案 0 :(得分:2)
您只需要将Results<City>
转换为Array<City>
,这样map
操作的结果也将是一个数组,而不是LazyMapRandomAccessCollection
。
您可以使用接受Sequence
的数组的初始化程序从结果集合中创建数组,因为Results
是Sequence
。
let ids = Array(favoritesTableViewController!.favoriteCityList?).map({ $0.id })