#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 : )