This is my first time using Swift and creating an iOS app and I am having trouble retrieving data from a REST API. I am familiar with Android Development but not iOS.
I am trying to use the API from www.thecocktaildb.com.
An example of a request is http://www.thecocktaildb.com/api/json/v1/1/search.php?s=margarita
.
I would like to use this request and input a string margarita
, or any other drink name, from a search bar and then display the array of drinks into a tableview.
Right now when I run, I am not getting any response from the console.
Am I on the right track?
I am also not sure how to display each result (drink) in a table view cell.
Here is my file:
SearchViewController.swift
class SearchViewController: UIViewController, UISearchBarDelegate, UITableViewDataSource, UITableViewDelegate { @IBOutlet weak var TableView: UITableView! @IBOutlet weak var SearchBar: UISearchBar! // search in progress or not var isSearching : Bool = false override func viewDidLoad() { super.viewDidLoad() for subView in self.SearchBar.subviews { for subsubView in subView.subviews { if let textField = subsubView as? UITextField { textField.attributedPlaceholder = NSAttributedString(string: NSLocalizedString("Search", comment: "")) } } } // set search bar delegate self.SearchBar.delegate = self } func searchBar(searchBar: UISearchBar, textDidChange searchText: String) { if self.SearchBar.text!.isEmpty { // set searching false self.isSearching = false }else{ // set searghing true self.isSearching = true let postEndpoint: String = "http://www.thecocktaildb.com/api/json/v1/1/search.php?s="+ self.SearchBar.text!.lowercaseString guard let url = NSURL(string: postEndpoint) else { print("Error: cannot create URL") return } let urlRequest = NSURLRequest(URL: url) let config = NSURLSessionConfiguration.defaultSessionConfiguration() let session = NSURLSession(configuration: config) let task = session.dataTaskWithRequest(urlRequest, completionHandler: { (data, response, error) in guard let responseData = data else { print("Error: did not receive data") return } guard error == nil else { print("error calling GET on www.thecocktaildb.com") print(error) return } // parse the result as JSON, since that's what the API provides let post: NSDictionary do { post = try NSJSONSerialization.JSONObjectWithData(responseData, options: []) as! NSDictionary } catch { print("error trying to convert data to JSON") return } if let strDrink = post["strDrink"] as? String { print("The drink is: "+ strDrink) } }) task.resume() } } func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return 0 } func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) return cell } func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { } // hide kwyboard when search button clicked func searchBarSearchButtonClicked(searchBar: UISearchBar) { self.SearchBar.resignFirstResponder() } // hide keyboard when cancel button clicked func searchBarCancelButtonClicked(searchBar: UISearchBar) { self.SearchBar.text = "" self.SearchBar.resignFirstResponder() } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. }}