Make REST API call in Swift

前端 未结 15 1318
被撕碎了的回忆
被撕碎了的回忆 2020-12-02 04:20

I\'m trying to use Swift to make a GET call to a REST API, and have tried to follow numerous tutorials, but can\'t figure it out. Either because I cannot figure out how to

相关标签:
15条回答
  • 2020-12-02 04:33

    Api Call using Model Class

        let urlString = "http://--.154.--.78/------/index.php?route=api/coupon/all"
    
        let url = URL(string: urlString)
        var request = URLRequest(url: url!)
        request.httpMethod = "GET"
    
        URLSession.shared.dataTask(with:request) { (data, response, error) in
            if error != nil {
                print(error)
            } else {
                do {
    
                    let parsedDictionaryArray = try JSONSerialization.jsonObject(with: data!) as! [String:AnyObject]
                    print(parsedDictionaryArray)
    
                    if let arry = parsedDictionaryArray["data"] as? [[String:AnyObject]] {
                    for dic in arry {
                        let name = dic["name"]
                        let descriptionData = dic["description"]
                        self.modelReference.append(model(name: name as! String, descriptionStr: descriptionData as! String))
                        print(name!)
                    }
                    }
                } catch let error as NSError {
                    print(error)
                }
            }
    
            }.resume()
    

    create a variable and connect with model class

    var modelReference = [model]()
    

    create a model class New -> swift class

    import Foundation
    class model : NSObject{
    var name : String
    var descriptionStr: String
    
    init(name : String, descriptionStr: String)
    {
        self.name = name
        self.descriptionStr = descriptionStr
    }
    

    }

    then we can connect with our table view objects

    let cell = tableView.dequeueReusableCell(withIdentifier: "TableViewCellID")as! TableViewCell
        cell.listName.text = modelReference[indexPath.row].name
    
    0 讨论(0)
  • 2020-12-02 04:35
    let headers = [
                    "cache-control": "no-cache",
                    "postman-token": "6f8a-12c6-87a1-ac0f25d6385a"
                ]
    
                let request = NSMutableURLRequest(url: NSURL(string: "Your url string")! as URL,
                                                  cachePolicy: .useProtocolCachePolicy,
                                                  timeoutInterval: 10.0)
                request.httpMethod = "GET"
                request.allHTTPHeaderFields = headers
    
                let session = URLSession.shared
                let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
                    if error == nil && data != nil {
                        do {
                            // Convert NSData to Dictionary where keys are of type String, and values are of any type
                            let json = try JSONSerialization.jsonObject(with: data!, options: JSONSerialization.ReadingOptions.mutableContainers) as! [String:AnyObject]
                            print(json)
    
                            //do your stuff
    
                          //  completionHandler(true)
    
                        } catch {
                           // completionHandler(false)
                        }
                    }
                    else if error != nil
                    {
                        //completionHandler(false)
                    }
                }).resume()
                }
    
    0 讨论(0)
  • 2020-12-02 04:37

    Swift 5 & 4

    let params = ["username":"john", "password":"123456"] as Dictionary<String, String>
    
    var request = URLRequest(url: URL(string: "http://localhost:8080/api/1/login")!)
    request.httpMethod = "POST"
    request.httpBody = try? JSONSerialization.data(withJSONObject: params, options: [])
    request.addValue("application/json", forHTTPHeaderField: "Content-Type")
    
    let session = URLSession.shared
    let task = session.dataTask(with: request, completionHandler: { data, response, error -> Void in
        print(response!)
        do {
            let json = try JSONSerialization.jsonObject(with: data!) as! Dictionary<String, AnyObject>
            print(json)
        } catch {
            print("error")
        }
    })
    
    task.resume()
    
    0 讨论(0)
  • 2020-12-02 04:38

    edited for swift 2

    let url = NSURL(string: "http://www.test.com")
    
        let task = NSURLSession.sharedSession().dataTaskWithURL(url!) {(data, response, error) in
            print(NSString(data: data!, encoding: NSUTF8StringEncoding))
        }
    
        task.resume()
    
    0 讨论(0)
  • 2020-12-02 04:39

    If you're working in Swift 3, the syntax changes. The example here worked for me and has a good explanation of the steps: https://grokswift.com/simple-rest-with-swift/

    This is the code from that tutorial:

    let todoEndpoint: String = "https://jsonplaceholder.typicode.com/todos/1"
    guard let url = URL(string: todoEndpoint) else {
      print("Error: cannot create URL")
      return
    }
    let urlRequest = URLRequest(url: url)
    
    let task = session.dataTask(with: urlRequest) {
      (data, response, error) in
      // check for any errors
      guard error == nil else {
        print("error calling GET on /todos/1")
        print(error!)
        return
      }
      // make sure we got data
      guard let responseData = data else {
        print("Error: did not receive data")
        return
      }
      // parse the result as JSON, since that's what the API provides
      do {
        guard let todo = try JSONSerialization.jsonObject(with: responseData, options: [])
          as? [String: Any] else {
          print("error trying to convert data to JSON")
          return
        }
        // now we have the todo
        // let's just print it to prove we can access it
        print("The todo is: " + todo.description)
    
        // the todo object is a dictionary
        // so we just access the title using the "title" key
        // so check for a title and print it if we have one
        guard let todoTitle = todo["title"] as? String else {
          print("Could not get todo title from JSON")
          return
        }
        print("The title is: " + todoTitle)
      } catch  {
        print("error trying to convert data to JSON")
        return
      }
    }
    task.resume()
    
    0 讨论(0)
  • 2020-12-02 04:42
    func getAPICalling(mainUrl:String) {
        //create URL
        guard let url = URL(string: mainUrl) else {
          print("Error: cannot create URL")
          return
        }
        //create request
        let urlRequest = URLRequest(url: url)
        
        // create the session
        let config = URLSessionConfiguration.default
        let session = URLSession(configuration: config)
        
        // make the request
        let task = session.dataTask(with: urlRequest) {
          (data, response, error) in
            
          // check for any errors
          guard error == nil else {
            print("error calling GET")
            print(error!.localizedDescription)
            return
          }
            
          // make sure we got data
          guard let responseData = data else {
            print("error: did not receive data")
            return
          }
            
          // convert Data in JSON && parse the result as JSON, since that's what the API provides
          do {
            guard let object = try JSONSerialization.jsonObject(with: responseData, options: [])
              as? [String: Any] else {
                print("error trying to convert data to JSON")
                return
            }
            //JSON Response
            guard let todoTitle = object["response"] as? NSDictionary else {
              print("Could not get todo title from JSON")
              return
            }
            
            //Get array in response
            let responseList = todoTitle.value(forKey: "radioList") as! NSArray
            
            for item in responseList {
                let dic = item as! NSDictionary
                let str = dic.value(forKey: "radio_des") as! String
                self.arrName.append(str)
                print(item)
            }
            
            DispatchQueue.main.async {
                self.tblView.reloadData()
            }
            
          } catch  {
            print("error trying to convert data to JSON")
            return
          }
        }
        task.resume()
    }
    

    Usage:

    getAPICalling(mainUrl:"https://dousic.com/api/radiolist?user_id=16")

    0 讨论(0)
提交回复
热议问题