Невозможно преобразовать значение типа «Promise <[NSDictionary]>» в ожидаемый тип аргумента «Guarantee <Void>» - PullRequest
0 голосов
/ 09 мая 2018

В настоящее время у меня возникают проблемы, когда я обновляю свой PromiseKit со Swift 2 до Swift 4. Многие из моих обещаний возвращают эту проблему из 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.

Назначение функции довольно просто. Он просто вводит информацию о команде в функцию и возвращает ее.

Ошибки возникают в строках "return when ()"

1 Ответ

0 голосов
/ 09 мая 2018

Прежде всего, это swift 4, и вы не должны использовать NS... типы, сейчас есть просто быстрые типы.

Следующая вещь, согласно заметкам о выпуске :

  • then передается предыдущее значение обещания и требует, чтобы вы вернули обещание.
  • done передается предыдущее значение обещания и возвращает обещание Void (что составляет 80% использования цепочки)
  • map передается предыдущее значение обещания и требует, чтобы вы вернули не обещание, т.е. значение.

почти все then следует заменить на map.

Кроме того, вы должны переписать when как when(fulfilled:), чтобы вернуть Promise, а не Guarantee.

...