2017-08-20 2 views
0

Wenn ich mit dem Code mit Xcode Spielplatz spielte, funktioniert der folgende Code. die zurück in die Hauptwarteschlange gesendet werden kann und in main queue. drucken.Abrufen von Daten aus dem Internet im Terminal

aber wenn ich den folgenden Code eingefügt und den Code als Bash-Befehl erstellen. Es funktioniert nicht. Es druckte alle Zeilen außer in main queue. aus.

Daher glaube ich, wenn der Code als Bash-Befehl erfüllt ist, wenn der Code DispatchQueue.main.async ausgeführt wird, etwas passieren würde, die nicht an die Hauptwarteschlange gesendet werden kann. Wie kann ich das beheben?

import Foundation 
let defaultSession = URLSession(configuration: URLSessionConfiguration.default) 
let url = URL(string: "https://api.pearson.com/v2/dictionaries/ldec/entries?headword=test&apikey=zAONRFmzZsfQ4H4F53kJbpOzq9CUJtnS") 
if let url = url { 
    print("start") 
    defaultSession.dataTask(with: url, completionHandler: {data, response, error in 
     print("other queue.") 
     if let error = error { 
      print(error) 
      return 
     } else if let httpResponse = response as? HTTPURLResponse, 200...299 ~= httpResponse.statusCode, let data = data {//, let result = data as? Dictionary<String, Any> { 
      //print(result) 
      print("going back to the main queue") 
      DispatchQueue.main.async { 
       print("in main queue.") 
      } 
     } else { 
      print("something really wrong") 
     } 
    }).resume() 
} 
while true {} 

Antwort

-2

Schauen Sie sich den folgenden Code an. Es wird mit Spielplatz und Terminal funktionieren.

import Foundation 

var isRunning: Bool = true 
let defaultSession = URLSession(configuration: URLSessionConfiguration.default) 
let url = URL(string: "http://www.google.com")! 
print("start") 
defaultSession.dataTask(with: url, completionHandler: {data, response, error in 
    print("other queue.") 
    if let error = error { 
     print(error) 
     return 
    } else if let httpResponse = response as? HTTPURLResponse, 200...299 ~= httpResponse.statusCode, let data = data { 
     print("before main queue - isMainThread=",Thread.current.isMainThread) 
     DispatchQueue.main.async { 
      print("executed in main queue - isMainThread=",Thread.current.isMainThread) 
      // you may consider exiting while loop    
      isRunning = false 
     } 
    } else { 
     print("something really wrong") 
    } 
}).resume() 
while(isRunning) { 
    RunLoop.current.run(mode: RunLoopMode.defaultRunLoopMode, before: Date()) 
    usleep(3) 
} 
Verwandte Themen