无法转换类型的值&#39; Promise&lt; [NSDictionary]&gt;&#39;预期参数类型&#39;保证<void>&#39;

时间:2018-05-09 17:06:24

标签: swift swift4 promisekit

目前,当我将PromiseKit从Swift 2更新为Swift 4时,我遇到了问题。很多我的Promise都将这个问题从NSDictionary返回到Guarantee Void。我不明白为什么会出现这个问题。如果有人能向我解释,那就非常感激了!

func getPlayerGameLog(sportName: String) -> Promise<NSArray> {
    let team = (self as? PlayerWithPositionAndGame)?.team
    let position = (self as? PlayerWithPositionAndGame)?.position

    if sportName == "mlb" {
        return when(Data.mlbPlayerGameLogs[id].get(), Data.sportsTeams[sportName].get()).then { (result, teams) -> NSArray in
            if result.count == 0 {
                return []
            } else {
                // Omitted Code
                return gameStats
            }
        }
    } else if sportName == "nfl" {
        return when(Data.nflPlayerGameLogs[id].get(), Data.sportsTeams[sportName].get()).then { (result, teams) -> NSArray in
            if result.count == 0 {
                return []
            } else {
                // Omitted Code
                return gameStats
            }
        }
    } else {
        return Data.nbaPlayerGameLogs[id].get().then { gameLogs in
            return []
        }
    }
}

现在游戏日志的声明如下

static let mlbPlayerGameLogs = MultiCache { id in API.getMLBPlayerGameLogs(playerID: id) }

mlb / nfl / nba也是如此。

该功能的目的非常简单。它只是将团队信息提取到函数中并返回它。

错误发生在&#34;返回时()&#34;线

1 个答案:

答案 0 :(得分:3)

首先,它是快速4,你不应该使用NS...类型,现在有纯粹的快速类型。

接下来,根据release notes

  
      
  • then已提供先前的承诺值,并要求您返回承诺。
  •   
  • done被提供前一个承诺值并返回一个Void承诺(占链使用量的80%)
  •   
  • map被提供前一个承诺值并要求您返回一个非承诺,即。价值。
  •   

几乎所有then都应替换为map

此外,您应该将when重写为when(fulfilled:)以返回Promise,而不是Guarantee