2016-01-19 4 views
2

Как получить ответ HTTP-заголовков из WebView? Я нашел полуресурсы at Stackoverflow, но он написан на Objective-C и не может преобразовать его в Swift (я пробовал с моими бедными знаниями Obj-C).Получить заголовок HTTP-ответа в UIWebView

код Objective-C:

- (void)webViewDidFinishLoad:(UIWebView *)webView { 
    NSCachedURLResponse *resp = [[NSURLCache sharedURLCache] cachedResponseForRequest:webView.request]; 
    NSLog(@"%@",[(NSHTTPURLResponse*)resp.response allHeaderFields]); 
} 
  1. Как этот код будет выглядеть на Swift?
  2. Возможно, теперь у нас есть лучшие способы сделать это? Кэширование не всегда включено.

ответ

3

Свифта

Swift является более жестким; Вы хотите, чтобы защитить себя от nil указателей и optionals:

  • проверки, что webView на самом деле имеет чек request
  • что request на самом деле имеет NSCachedURLResponse
  • типа проверить реакцию против NSHTTPURLResponse
func webViewDidFinishLoad(webView: UIWebView) { 
    if let request = webView.request { 
     if let resp = NSURLCache.sharedURLCache().cachedResponseForRequest(request) { 
      if let response = resp.response as? NSHTTPURLResponse { 
       print(response.allHeaderFields) 
      } 
     } 
    } 
} 
+2

'cachedResponseForRequest' всегда возвращаются ноль, обходной путь? или мне не хватает чего-то реализовать? –

+1

То же. cachedResponseForRequest возвращает ноль. На форумах Apple упоминается ошибка. Обходной путь? – finneycanhelp

+1

Кто-нибудь нашел решение для этого? – mtet88

0

Просто используя это в SWIFT 3,1:

if let request = webView.request { 
      if let resp = URLCache.shared.cachedResponse(for: request) { 
       if let response = resp.response as? HTTPURLResponse { 
        print(response.allHeaderFields) 
       } 
      } 
     } 
Смежные вопросы