2016-06-20 9 views
0

Versuchen, den Inhalt einer Website abzufragen, egal ob JSON oder REST API, kann ich nicht scheinen, damit es funktioniert. Derselbe Code funktioniert für die iOS-App, aber er wird den Inhalt nicht erhalten, wenn er in einer Swift macOS Terminal-Anwendung verwendet wird. Was ist der Hauptgrund?Xcode Swift macOS, Terminal App nicht NSURLSession

Das Projekt enthält keine Info.plist-Datei.

Hier ist ein Codebeispiel, das innerhalb einer iOS-Anwendung funktioniert, aber nicht innerhalb der macOS-Terminal-Anwendung. Ich rufe die Funktion mit einem einfachen jsonParser() auf, der die NSURLSession initiiert und den JSON druckt, wenn er angekommen ist.

enum JSONError: String, ErrorType { 
    case NoData = "ERROR: no data" 
    case ConversionFailed = "ERROR: conversion from JSON failed" 
} 

func jsonParser() { 
    let urlPath = "https://api.coindesk.com/v1/bpi/currentprice.json" 
    guard let endpoint = NSURL(string: urlPath) else { 
     print("Error creating endpoint") 
     return 
    } 
    let request = NSMutableURLRequest(URL:endpoint) 
    NSURLSession.sharedSession().dataTaskWithRequest(request) { (data, response, error) in 
     do { 
      guard let data = data else { 
       throw JSONError.NoData 
      } 
      guard let json = try NSJSONSerialization.JSONObjectWithData(data, options: []) as? NSDictionary else { 
      throw JSONError.ConversionFailed 
     } 
     print(json) 
    } catch let error as JSONError { 
     print(error.rawValue) 
    } catch let error as NSError { 
     print(error.debugDescription) 
    } 
    }.resume() 
} 
+0

Können Sie eine [kleine, eigenständige, kompilierbare] (http://www.sscce.org/) Swift-Datei erstellen, die das Problem reproduziert, wenn Sie es ausführen, und es veröffentlichen? – zneak

+0

Duplizieren von http://stackoverflow.com/questions/25126471/cfrunloop-in-swift-command-line-program? –

+0

Bearbeitet, um Beispielcode bereitzustellen. –

Antwort

0

konnte ich mein Problem lösen, indem

dispatch_main() 

am Ende meines Hauptprogrammcode hinzufügen. Oben aufgelistet war die Funktion, um die Web-Daten anzufordern. Danke an Martin und Eric, dass Sie es aufgezeigt haben.