2016-11-07 2 views
0

Das klingt vielleicht wie eine sehr dumme Frage, aber ich bin relativ neu zu schnell und kann nicht darüber nachdenken, wie das geht. Wie Sie in diesem Screenshot sehen können, habe ich ein Suchrezept-Textfeld in RecipesViewController, in dem der Benutzer ein Nahrungsmitteleinzelteil eingibt (das ich im api Anruf verwende). Nachdem der Benutzer die Schaltfläche gedrückt hat, rufe ich eine API an und erhalte Daten von dieser API und speichere diese Daten in der Instanzvariablen (searchRecipe-Array) in meiner RecipesViewController-Klasse. Jetzt versuche ich, die Daten zu zeigen, die ich von der API in einer Tabellenansicht erhielt, also habe ich eine andere Klasse, die SearchRecipeTViewController genannt wird. In dieser Klasse möchte ich die Tabelle mit den Daten füllen, die ich von der API erhalten habe, aber wenn ich versuche, auf das searchRecipe-Array zuzugreifen (das die von der API empfangenen Elemente speichert), erhalte ich einen leeren Wert, von dem ich weiß, dass er auf die Instanzvariable zurückzuführen ist als "" initialisiert werden. Aber wie gehe ich jetzt vor, damit ich Daten von der API abrufen und in der Tabellenansicht anzeigen kann, wenn der Benutzer die Schaltfläche drückt. Irgendwelche Vorschläge würden geschätzt werden.Swift Umgang mit Klassen, UIButtons und TableView

-Code aufrufen und Daten von api zu erhalten, wenn die Taste SwiftyJSON Versuchen

@IBAction func SearchButton(sender: UIButton) { 
if let recipe = RecipeSearchBar.text { 
     searchRecipe = recipe 
    } 
    //search recipe API call 
    endpoint = "http://api.yummly.com/v1/api/recipes? _app_id=apiID&_app_key=apiKey&q=\(searchRecipe)" 
    Alamofire.request(.GET, endpoint).responseJSON { response in 
     if response.result.isSuccess { 
      let data = response.result.value as! NSDictionary 
      if let matches = data["matches"] as? [[String: AnyObject]] { 
       for match in matches { 
        if let name = match["recipeName"] as? String { 
         self.recipeName.append(name); 
        } 
       } 
      } 
     } 
     else if response.result.isFailure { 
      print("Bad request") 
     } 
    } 
} 

Antwort

-1

geklickt wird mit dem JSON gibt die API zu manipulieren. SwiftyJSON macht API-Aufrufe, die JSON verwenden viel einfacher. Hier ist der Code, den ich verwendet habe, der sowohl Alamofire als auch SwiftyJSON verwendet.

//Use alamofire to connect to the web service and use GET on it 
    Alamofire.request(url).responseJSON { response in 
     if let error = response.result.error { 
      print("Error: \(error)") 
      return 
     } 

     //Value is the response the webservice gives, given as a Data Obkect 
     if let value = response.result.value { 
      //The information given from the webservice in JSON format 
      let users = JSON(value) 
      print("The user information is: \(users)") 

      //Get each username in the JSON output and print it 
      for username in users.arrayValue{ 
       print(username["username"].stringValue) 
      } 
     } 
    } 

vergessen einen Link zu SwiftJSON hinzuzufügen: https://github.com/SwiftyJSON/SwiftyJSON

+0

, die Antwort auf meine Frage tut ich in der Lage bin zu extrahieren, was ich von der API wollen. – smriti