Есть две функции, как показано ниже. Большая часть функциональности одинакова для обоих. Его идея состоит в том, чтобы получить выход webservice из getResponse() [Вспомогательный вызов помощника], проанализировать и передать информацию обернутому обратному вызову через getResult().Работа с закрытием - Сделать код более общим
static func getAllDealers(dealerSearchServiceDomain: ARSDealerSearchServiceDomain, wrapperCallback:(getResult:() throws -> Void) -> Void) throws
{
try ARSInputValidator.validateZipCode(dealerSearchServiceDomain.zip)
try ARSDealerConnection.getAllDealers(dealerSearchServiceDomain, helperCallback: { (getResponse) -> Void in
do
{
let result = try getResponse()
try ARSDealerParser.parseDealerSearchResponse(dealerSearchServiceDomain)
wrapperCallback(getResult: { return })
}
catch
{
wrapperCallback(getResult: { throw error })
}
})
}
static func getDealerDetails(dealerDetailsServiceDomain: ARSDealerDetailsServiceDomain, wrapperCallback:(getResult:() throws -> Void) -> Void) throws
{
try ARSDealerConnection.getDealerDetails(dealerDetailsServiceDomain, helperCallback: { (getResponse) -> Void in
do
{
let result = try getResponse()
try ARSDealerParser.parseDealerDetailsResponse(dealerDetailsServiceDomain)
wrapperCallback(getResult: { return })
}
catch
{
wrapperCallback(getResult: { throw error })
}
})
}
Я пытаюсь добавить отдельную функцию для общей функциональности, как,
static func parser(serviceCallDomain: ARSServiceCallDomain ,wrapperCallback:(getResult:() throws -> String) -> Void, helperCallback:(getResponse:() throws -> String) -> Void) throws
{
helperCallback { (getResponse) -> Void in
Но есть ошибка & компиляции я не в состоянии завершить его. Есть 15+ вызовов веб-сервисов, поэтому общее показание, которое я пытаюсь, будет очень полезно.
Следующий шаг, мне также нужно передать функции parseDealerSearchResponse() & parseDealerDetailsResponse() для общей функции.
Я новичок в закрытии. Незлая помощь.
// EDIT - ДОБАВЛЕНИЕ ОБРАЗЕЦ
У меня есть образец для этой проблемы в Git - Приведите класс Layer1.swift https://github.com/vivinjeganathan/ErrorHandling/tree/Closures-Refactor
Обратите внимание, что пример «общей функциональности» не заполнен, пожалуйста, покажите нам свою полную попытку создания этой функции. Несколько иначе: обратите внимание также на то, что 'Void' является просто типом для'() '(пустой tuple _type_ ('() 'также является единственным значением необязательного типа'() ')) и, следовательно,' (getResult:() throws -> Void) -> Void) 'эквивалентно' (getResult:() throws ->()) ->()) '. Даже если нет очевидного соглашения относительно этого, последнее согласуется с тем, что он не смешивает тип и тип данных для этого типа в одном выражении. – dfri
... наконец, функции/замыкания, которые возвращают '()', не должны указывать это явно, так, например, ваш параметр 'wrapperCallback' в сигнатуре' parser' может быть в чуть более компактной форме 'wrapperCallback: (getResult :() throws -> String)'. – dfri
@dfri Я отредактировал вопрос. Добавлен образец проекта в Github ... – vivin