2016-11-30 4 views
0

In WKWebView haben wir eine Methode evaluateJavaScript. Ich habe diese Methode überschrieben, um benutzerdefinierten Code hinzuzufügen.Erstellen einer Schließung inline

override open func evaluateJavaScript(_ javaScriptString: String, completionHandler: ((Any?, Error?) -> Swift.Void)? = nil) 
{ 
     let b:Bool? = true 
     let error: Error? = NSError(domain: "com.My.Tests", code: 1000, userInfo: nil) as Error 
     let completion = (b, error) -> Void 
     evaluateJavaScript(javaScriptString, completionHandler: completion) 
} 

Wie die Fertigstellung übergeben? Es wirft einen Fehler auf.

+0

Es hängt von der Version von Swift ab, die Sie verwenden. –

+0

Ich habe die Frage aktualisiert. –

+0

* "Es wirft einen Fehler auf." * - Welcher Fehler? – luk2302

Antwort

0

Das ist keine echte Schließung.

Die Signatur erwartet etwas wie

let completion = { (b, error) in print(b, error) } 

Erklärtes b und error Variablen nutzlos sind, weil b und error aus dem Verfahren zurückgeführt werden.

0
override open func evaluateJavaScript(_ javaScriptString: String, completionHandler: ((Any?, Error?) -> Swift.Void)? = nil) 
{ 
     let b:Bool? = true 
     let error: Error? = NSError(domain: "com.My.Tests", code: 1000, userInfo: nil) as Error 
     evaluateJavaScript(javaScriptString) { (result, error) in 
      if error != nil { 
      completionHandler?(nil, error) 
      } else { 
      completionHandler?(result, nil) 
      } 
     } 
} 
0

Ihr completion ist kein Verschluss. Es sollte so etwas wie

let completion = { (b: Any?, error: Error?) -> Void in 
    print("\(error)") 
} 

ich sein bin Vermutung, dass Sie Ihre WKWebView wie einige Javascript Auswertung nicht gehandelt werden soll. Wenn das der Fall ist, dann würden Sie entweder:

override func evaluateJavaScript(_ javaScriptString: String, completionHandler: ((Any?, Error?) -> Void)? = nil) { 
    evaluateJavaScript(javaScriptString) { b, error in 
     completionHandler?(true, NSError(domain: "com.My.Tests", code: 1000)) 
    } 
} 

Oder, wenn Sie nicht brauchen wirklich das Javascript zu bewerten, aber nur aussehen wie ein Versager (zB in einem Test stubbing):

override func evaluateJavaScript(_ javaScriptString: String, completionHandler: ((Any?, Error?) -> Void)? = nil) { 
    completionHandler?(true, NSError(domain: "com.My.Tests", code: 1000)) 
}