2017-09-13 45 views
0

我试图让写在斯威夫特2,新的旧的应用程序,更新到最新的功能最全,以适用于iOS准备转换斯威夫特3 11和Swift 4(即使已经晚了)。iOS的 - 无法将类型LazyMapRandomAccessCollection的价值 - 斯威夫特3

我翻译的过程后留下的一些错误,但这里有一个我无法修复。

以下是错误,从我的收藏夹刷新方法来:

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>? 

很明显,你会发现,我用的境界。

这里是方法refreshCity的原型:

class func refreshCity(cityIds: [Int], withHandler: @escaping (() -> Void)) {} 

这是我在这行得到了错误:

DataUtils.refreshCity(ids) {() -> Void in 

无法将类型的价值'LazyMapRandomAccessCollection<Results<City>, Int>' to expected element type Int

我应该在我的原型方法来改变,当我USI NG列表<>或结果<>容器?

+0

没有更多的上下文,很难给出确切的答案。 “favoriteCityList”的类型是什么?是'id'应该是一个'Int'和'ids'的'[INT]'? –

+0

ID是int所以IDS是一个[INT]但是当我使用地图上的结果类型,它搅乱一切,我不认识的类型了 – Balanced

回答

1

你只需要转换Results<City>Array<City>所以map操作的结果将是一个数组为好,而不是LazyMapRandomAccessCollection

由于ResultsSequence,您可以使用Array的初始化程序接受Sequence来创建一个结果集合中的Array。

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

+0

完美。正是我想要的。为什么我总是觉得过度复杂... – Balanced