2017-09-13 49 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