无法转换LazyMapRandomAccessCollection类型的值

时间:2017-09-13 08:23:19

标签: ios swift3 realm

我正在努力制作一个用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<>容器时,我应该在原型方法中更改哪些内容?

1 个答案:

答案 0 :(得分:2)

您只需要将Results<City>转换为Array<City>,这样map操作的结果也将是一个数组,而不是LazyMapRandomAccessCollection

您可以使用接受Sequence的数组的初始化程序从结果集合中创建数组,因为ResultsSequence

let ids = Array(favoritesTableViewController!.favoriteCityList?).map({ $0.id })