2016-06-12 3 views
0

Ich habe eine Webansicht innerhalb meiner App. Ich bin derzeit auf der Suche bei jeder Anfrage und sehen, ob sie ein YouTube-Video, bevor ermöglicht/Aufheben die Anfrage ist:Swift + iOS: Wie kann die Schließung innerhalb eines asynchronen Anrufs aufgerufen werden?

extension WebBrowserViewController: WKNavigationDelegate { 
    func webView(webView: WKWebView, decidePolicyForNavigationAction navigationAction: WKNavigationAction, decisionHandler: (WKNavigationActionPolicy) -> Void) { 
    if (urlVideoType(webView.URL!) != VideoUrl.Unknown && urlVideoType(webView.URL!) != VideoUrl.Youtube) { 
     ... 
    } else if urlVideoType(webView.URL!) == VideoUrl.Youtube { 
     // the success and failure part don't work 
     presentYoutubeVideoIfAvailable(webView.URL!, success: decisionHandler(.Cancel), failure: decisionHandler(.Allow)) <------------------- 
    } else { 
     decisionHandler(.Allow) 
    } 
    } 
} 

Meine presentYoutubeVideoIfAvailable Methode verwendet diesen YouTube-URL-Parser pod: https://github.com/movielala/YoutubeSourceParserKit

jedoch, dass eine macht Asynchron-Anruf, und ich weiß nicht, wie sie den Erfolg und Misserfolg Methoden in meiner Methode machen nennen:

func presentYoutubeVideoIfAvailable(url: NSURL, success:(), failure:()) { 
    Youtube.h264videosWithYoutubeURL(url) { [unowned self] (videoInfo, _) -> Void in 
     switch videoInfo?["url"] as? String { 
     case .Some(let videoUrlString): 
     VideoStore.addVideo(url.absoluteString, title: videoInfo?["title"] as? String ?? "Unknown") 
     success 
     self.presentVideo(NSURL(string: videoUrlString)!) 
     case .None: 
     print("herereee") // gets printed, so I know it's here 
     failure // doesn't do anything. it should be allowing the request but it isn't <----------------------------------- 
     self.showError(.YoutubeParsingFail) 
     } 
    } 
    } 

ich will es so, dass, wenn die youtube-pod eine uRL zurückgibt, sollte es die Web-Ansicht Anfrage abbrechen, und wenn es fa Ich möchte, dass es mit der Anfrage fortfährt. Wie würde ich das tun?

+0

werden muss 'Erfolg()' und 'Fehler()' Sie sind nicht wirklich die Verschlüsse aufrufen. – sbarow

Antwort

1

Der Grund, warum hier nichts passiert ist, dass Sie nicht die Schließungen anrufen. Verschlüsse sollten wie jede andere Funktion in schnellen aufgerufen werden, etwa so:

success() failure()

Verwandte Themen