无法将类型'Promise <[NSDictionary]>'的值转换为预期的参数类型'Guarantee <Void>'

Kon*_*ght 0 swift promisekit swift4

目前,当我将我的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 []
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

现在游戏日志的声明如下

static let mlbPlayerGameLogs = MultiCache { id in API.getMLBPlayerGameLogs(playerID: id) }
Run Code Online (Sandbox Code Playgroud)

mlb / nfl / nba相同。

该功能的目的非常简单。只是将团队信息拉入函数并返回。

在“ return when()”行上发生错误

pac*_*ion 5

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

接下来,根据发行说明

  • then 会收到之前的承诺值,并且需要您返回承诺。
  • done 收到之前的promise值,并返回一个Void许诺(这是链使用量的80%)
  • map收到先前的承诺值,并且要求您返回非承诺,即。一个值。

几乎所有then都应替换为map

另外,您应该将改写whenwhen(fulfilled:)return Promise,而不是Guarantee