PromiseKit 6, Alamofire, Xcode 10.2 /Swift 5

#swift #alamofire #promisekit #swift5

#swift #alamofire #promisekit #swift5

Вопрос:

У меня возникли проблемы с написанием следующего кода:

     public
    func
    get(organization inSID: String)
        -> Promise<Organization>
    {
        URLSession.showNetworkActivity()
        return firstly
        {
            let req = buildRequest(path: "/api/(inUUID)", date: inDate, headers: [.organizationSID : inSID])
            self.mgr.request(req).responseJSON()
        }
        .map()
        { inData, inResp in
            return Organization(sid: "")
        }
        .ensure
        {
            URLSession.hideNetworkActivity()
        }
    }
  

Я получаю сообщение об ошибке firstly : Неоднозначная ссылка на элемент ‘firstly (выполнить:)’

После добавления import PMKAlamofire в начало моего файла и более подробного описания я получаю это для компиляции:

     public
    func
    get(organization inSID: String)
        -> Promise<Organization>
    {
        URLSession.showNetworkActivity()
        return firstly
        { () -> Promise<(json: Any, response: PMKAlamofireDataResponse)> in
            let req = buildRequest(path: "/api/v2/organizations/(inSID)", headers: [.organizationSID : inSID])
            return self.mgr.request(req).responseJSON()
        }
        .map()
        { inResp in
            return Organization(sid: "")
        }
        .ensure
        {
            URLSession.hideNetworkActivity()
        }
    }
  

Обратите внимание на добавленный явный () -> Promise<(json: Any, response: PMKAlamofireDataResponse)> и явный return оператор в firstly закрытии. Я не знаю, требуется ли это сейчас Swift 5 или он все еще не может правильно определять типы.

Комментарии:

1. Вы исправили ошибку?

2. Мне удалось пройти мимо этого, но я не помню, как сейчас.

3. после использования блока then или map вы должны установить блок финализатора, как это сделано, после чего вы можете использовать блок обеспечения или finally : )