2014-12-27 3 views
0

Я только начал использовать Swift в своем проекте. При чтении инструкции библиотеки Alamofire, я нашел код, как:Закрытие в Swift

extension Request { 
    class func XMLResponseSerializer() -> Serializer { 
     return { (request, response, data) in 
      if data == nil { 
       return (nil, nil) 
      } 

      var XMLSerializationError: NSError? 
      let XML = ONOXMLDocument.XMLDocumentWithData(data, &XMLSerializationError) 

      return (XML, XMLSerializationError) 
     } 
    } 

    func responseXMLDocument(completionHandler: (NSURLRequest, NSHTTPURLResponse?, OnoXMLDocument?, NSError?) -> Void) -> Self { 
     return response(serializer: Request.XMLResponseSerializer(), completionHandler: { (request, response, XML, error) in 
      completionHandler(request, response, XML, error) 
     }) 
    } 
} 

Во второй функции responseXMLDocument Интересно, почему мы должны переписать закрытия. Если параметр функции уже закрыт, почему мы не можем просто написать:

return response(serializer: Request.XMLResponseSerializer(), completionHandler:completionHandler) 

Я пробовал, но не компилируется.

ответ

0

Мне пришло в голову сразу после того, как я разместил свой вопрос ... Проблема в том, что тип параметра не совпадает. Более конкретно, это параметр XML, который должен быть AnyObject ?, это OnoXMLDocument? во внутреннем обработчике.

+0

Добавьте свой ответ на свой вопрос в качестве редактирования. –

+1

@ LajosArpad № OP сделал правильную вещь, отправив ответ на вопрос в качестве ответа. –

+1

@ LajosArpad См. [Можно ли ответить на мой собственный вопрос?] (Http://stackoverflow.com/help/self-answer) – Rob