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



目前,当我将 PromiseKit 从 Swift 2 更新到 Swift 4 时,我遇到了问题。我的很多承诺都是从NSDictionary返回此问题以保证无效。我不明白为什么会出现这个问题。如果有人能向我解释一下,那将不胜感激!

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也是如此。

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

"返回时(("行上发生错误

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

接下来,根据发行说明:

  • then将提供上一个承诺值,并要求您返回承诺。
  • done被馈送上一个承诺值并返回一个 Void 承诺(这是链使用的 80%(
  • map被馈送上一个承诺值,并要求您返回一个非承诺,即一个值。

几乎所有then都应该替换为map.

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

相关内容

最新更新