Saya mencoba menggunakan Swift untuk melakukan panggilan GET ke REST API, dan telah mencoba mengikuti banyak tutorial, tetapi tidak dapat mengetahuinya. Entah karena saya tidak tahu cara menerjemahkan semua Obj-C ke Swift, atau karena setengah dari metode n 'seperti itu sudah usang. Apakah ada yang tahu cara melakukan panggilan, dan mengurai data JSON yang dikembalikan?
95
Jawaban:
Anda bisa melakukan seperti ini:
var url : String = "http://google.com?test=toto&test2=titi" var request : NSMutableURLRequest = NSMutableURLRequest() request.URL = NSURL(string: url) request.HTTPMethod = "GET" NSURLConnection.sendAsynchronousRequest(request, queue: NSOperationQueue(), completionHandler:{ (response:NSURLResponse!, data: NSData!, error: NSError!) -> Void in var error: AutoreleasingUnsafeMutablePointer<NSError?> = nil let jsonResult: NSDictionary! = NSJSONSerialization.JSONObjectWithData(data, options:NSJSONReadingOptions.MutableContainers, error: error) as? NSDictionary if (jsonResult != nil) { // process jsonResult } else { // couldn't load JSON, look at error } })
sumber
Cepat 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()
sumber
Saya pikir
NSURLSession
api lebih cocok dalam situasi ini. Karena jika Anda menulis kode cepat, target proyek Anda setidaknya iOS 7 dan iOS 7 mendukungNSURLSession
api. Pokoknya ini kodenyalet url = "YOUR_URL" NSURLSession.sharedSession().dataTaskWithURL(NSURL(string: url)) { data, response, error in // Handle result }.resume()
sumber
// Handle result
mungkin:let resp = String( data:data!, encoding:NSUTF8StringEncoding)!
NSURLSessionConfiguration
. Saya pikir ini harus menjadi jawaban yang diterima.Berikut adalah kode lengkap untuk permintaan REST API menggunakan NSURLSession dengan cepat
For GET Request let configuration = NSURLSessionConfiguration .defaultSessionConfiguration() let session = NSURLSession(configuration: configuration) let urlString = NSString(format: "your URL here") print("get wallet balance url string is \(urlString)") //let url = NSURL(string: urlString as String) let request : NSMutableURLRequest = NSMutableURLRequest() request.URL = NSURL(string: NSString(format: "%@", urlString) as String) request.HTTPMethod = "GET" request.timeoutInterval = 30 request.addValue("application/json", forHTTPHeaderField: "Content-Type") request.addValue("application/json", forHTTPHeaderField: "Accept") let dataTask = session.dataTaskWithRequest(request) { (let data: NSData?, let response: NSURLResponse?, let error: NSError?) -> Void in // 1: Check HTTP Response for successful GET request guard let httpResponse = response as? NSHTTPURLResponse, receivedData = data else { print("error: not a valid http response") return } switch (httpResponse.statusCode) { case 200: let response = NSString (data: receivedData, encoding: NSUTF8StringEncoding) print("response is \(response)") do { let getResponse = try NSJSONSerialization.JSONObjectWithData(receivedData, options: .AllowFragments) EZLoadingActivity .hide() // } } catch { print("error serializing JSON: \(error)") } break case 400: break default: print("wallet GET request got response \(httpResponse.statusCode)") } } dataTask.resume()
Untuk permintaan POST ...
let configuration = NSURLSessionConfiguration .defaultSessionConfiguration() let session = NSURLSession(configuration: configuration) let params = ["username":bindings .objectForKey("username"), "provider":"walkingcoin", "securityQuestion":securityQuestionField.text!, "securityAnswer":securityAnswerField.text!] as Dictionary<String, AnyObject> let urlString = NSString(format: “your URL”); print("url string is \(urlString)") let request : NSMutableURLRequest = NSMutableURLRequest() request.URL = NSURL(string: NSString(format: "%@", urlString)as String) request.HTTPMethod = "POST" request.timeoutInterval = 30 request.addValue("application/json", forHTTPHeaderField: "Content-Type") request.addValue("application/json", forHTTPHeaderField: "Accept") request.HTTPBody = try! NSJSONSerialization.dataWithJSONObject(params, options: []) let dataTask = session.dataTaskWithRequest(request) { (let data: NSData?, let response: NSURLResponse?, let error: NSError?) -> Void in // 1: Check HTTP Response for successful GET request guard let httpResponse = response as? NSHTTPURLResponse, receivedData = data else { print("error: not a valid http response") return } switch (httpResponse.statusCode) { case 200: let response = NSString (data: receivedData, encoding: NSUTF8StringEncoding) if response == "SUCCESS" { } default: print("save profile POST request got response \(httpResponse.statusCode)") } } dataTask.resume()
Saya harap ini berhasil.
sumber
diedit untuk 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()
sumber
Swift 4 - DAPATKAN permintaan
var request = URLRequest(url: URL(string: "http://example.com/api/v1/example")!) request.httpMethod = "GET" URLSession.shared.dataTask(with: request, completionHandler: { data, response, error -> Void in do { let jsonDecoder = JSONDecoder() let responseModel = try jsonDecoder.decode(CustomDtoClass.self, from: data!) print(responseModel) } catch { print("JSON Serialization error") } }).resume()
Jangan lupa untuk mengonfigurasi Pengaturan Keamanan Transportasi Aplikasi untuk menambahkan domain Anda ke pengecualian dan mengizinkan permintaan http yang tidak aman jika Anda mencapai titik akhir tanpa menggunakan HTTPS.
Anda dapat menggunakan alat seperti http://www.json4swift.com/ untuk membuat secara otomatis Pemetaan Kodeable dari tanggapan JSON Anda.
sumber
Swift 3.0.0
let request = NSMutableURLRequest(url: NSURL(string: "http://httpstat.us/200")! as URL) let session = URLSession.shared request.httpMethod = "GET" request.addValue("application/json", forHTTPHeaderField: "Content-Type") request.addValue("application/json", forHTTPHeaderField: "Accept") let task = session.dataTask(with: request as URLRequest, completionHandler: {data, response, error -> Void in if error != nil { print("Error: \(String(describing: error))") } else { print("Response: \(String(describing: response))") } }) task.resume()
sumber
Cepat 4
Buat aplikasi menggunakan Alamofire dengan metode Api Post
Instal file pod -pod 'Alamofire', '~> 4.0' untuk Swift 3 dengan Xcode 9
Buat kelas Webservices.swift, impor Alamofire
Desain storyBoard, Tampilan Login
masukkan Kode berikut untuk ViewControllerClass
import UIKit class ViewController: UIViewController { @IBOutlet var usernameTextField: UITextField! @IBOutlet var passwordTextField: UITextField! var usertypeStr :String = "-----------" var loginDictionary : NSDictionary? override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view, typically from a nib. } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } @IBAction func loginButtonClicked(_ sender: Any) { WebServices.userLogin(userName: usernameTextField.text!, password: passwordTextField.text!,userType: usertypeStr) {(result, message, status )in if status { let loginDetails = result as? WebServices self.loginDictionary = loginDetails?.loginData if self.loginDictionary?["status"] as? String == "error" { self.alertMessage(alerttitle: "Login Error", (self.loginDictionary?["message"] as? String)!) } else if self.loginDictionary?["status"] as? String == "ok" { self.alertMessage(alerttitle: "", "Success") }else { self.alertMessage(alerttitle: "", (self.loginDictionary?["message"] as? String)!) } } else { self.alertMessage(alerttitle: "", "Sorry") } } } func alertMessage(alerttitle:String,_ message : String){ let alertViewController = UIAlertController(title:alerttitle, message:message, preferredStyle: .alert) alertViewController.addAction(UIAlertAction(title: "OK", style: .default, handler: nil)) present(alertViewController, animated: true, completion: nil) } }
Masukkan Kode Berikut Untuk WebserviceClass
import Foundation import Alamofire class WebServices: NSObject { enum WebServiceNames: String { case baseUrl = "https://---------------" case UserLogin = "------------" } // MARK: - Login Variables var loginData : NSDictionary? class func userLogin(userName: String,password : String,userType : String, completion : @escaping (_ response : AnyObject?, _ message: String?, _ success : Bool)-> ()) { let url = WebServiceNames.baseUrl.rawValue + WebServiceNames.UserLogin.rawValue let params = ["USER": userName,"PASS":password,"API_Key" : userType] WebServices.postWebService(urlString: url, params: params as [String : AnyObject]) { (response, message, status) in print(response ?? "Error") let result = WebServices() if let data = response as? NSDictionary { print(data) result.loginData = data completion(result, "Success", true) }else { completion("" as AnyObject?, "Failed", false) } } } //MARK :- Post class func postWebService(urlString: String, params: [String : AnyObject], completion : @escaping (_ response : AnyObject?, _ message: String?, _ success : Bool)-> Void) { alamofireFunction(urlString: urlString, method: .post, paramters: params) { (response, message, success) in if response != nil { completion(response as AnyObject?, "", true) }else{ completion(nil, "", false) } } } class func alamofireFunction(urlString : String, method : Alamofire.HTTPMethod, paramters : [String : AnyObject], completion : @escaping (_ response : AnyObject?, _ message: String?, _ success : Bool)-> Void){ if method == Alamofire.HTTPMethod.post { Alamofire.request(urlString, method: .post, parameters: paramters, encoding: URLEncoding.default, headers: nil).responseJSON { (response:DataResponse<Any>) in print(urlString) if response.result.isSuccess{ completion(response.result.value as AnyObject?, "", true) }else{ completion(nil, "", false) } } }else { Alamofire.request(urlString).responseJSON { (response) in if response.result.isSuccess{ completion(response.result.value as AnyObject?, "", true) }else{ completion(nil, "", false) } } } } //Mark:-Cancel class func cancelAllRequests() { Alamofire.SessionManager.default.session.getTasksWithCompletionHandler { dataTasks, uploadTasks, downloadTasks in dataTasks.forEach { $0.cancel() } uploadTasks.forEach { $0.cancel() } downloadTasks.forEach { $0.cancel() } } } }
sumber
Di swift 3.3 dan 4. Saya membuat kelas APIManager dengan dua metode publik. Lewati saja parameter yang diperlukan, nama api, dan jenis permintaan. Anda akan mendapatkan respons lalu meneruskannya ke penutupan.
import UIKit struct RequestType { static let POST = "POST" static let GET = "GET" } enum HtttpType: String { case POST = "POST" case GET = "GET" } class APIManager: NSObject { static let sharedInstance: APIManager = { let instance = APIManager() return instance }() private init() {} // First Method public func requestApiWithDictParam(dictParam: Dictionary<String,Any>, apiName: String,requestType: String, isAddCookie: Bool, completionHendler:@escaping (_ response:Dictionary<String,AnyObject>?, _ error: NSError?, _ success: Bool)-> Void) { var apiUrl = “” // Your api url apiUrl = apiUrl.appendingFormat("%@", apiName) let config = URLSessionConfiguration.default let session = URLSession(configuration: config) let url = URL(string: apiUrl)! let HTTPHeaderField_ContentType = "Content-Type" let ContentType_ApplicationJson = "application/json" var request = URLRequest.init(url: url) request.timeoutInterval = 60.0 request.cachePolicy = URLRequest.CachePolicy.reloadIgnoringLocalCacheData request.addValue(ContentType_ApplicationJson, forHTTPHeaderField: HTTPHeaderField_ContentType) request.httpMethod = requestType print(apiUrl) print(dictParam) let dataTask = session.dataTask(with: request) { (data, response, error) in if error != nil { completionHendler(nil, error as NSError?, false) } do { let resultJson = try JSONSerialization.jsonObject(with: data!, options: []) as? [String:AnyObject] print("Request API = ", apiUrl) print("API Response = ",resultJson ?? "") completionHendler(resultJson, nil, true) } catch { completionHendler(nil, error as NSError?, false) } } dataTask.resume() } // Second Method public func requestApiWithUrlString(param: String, apiName: String,requestType: String, isAddCookie: Bool, completionHendler:@escaping (_ response:Dictionary<String,AnyObject>?, _ error: NSError?, _ success: Bool)-> Void ) { var apiUrl = "" // Your api url let config = URLSessionConfiguration.default let session = URLSession(configuration: config) var request: URLRequest? if requestType == "GET" { apiUrl = String(format: "%@%@&%@", YourAppBaseUrl,apiName,param) apiUrl = apiUrl.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed)! print("URL=",apiUrl) let url = URL(string: apiUrl)! request = URLRequest.init(url: url) request?.httpMethod = "GET" } else { apiUrl = String(format: "%@%@", YourAppBaseUrl,apiName) apiUrl = apiUrl.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed)! print("URL=",apiUrl) let bodyParameterData = param.data(using: .utf8) let url = URL(string: apiUrl)! request = URLRequest(url: url) request?.httpBody = bodyParameterData request?.httpMethod = "POST" } request?.timeoutInterval = 60.0 request?.cachePolicy = URLRequest.CachePolicy.reloadIgnoringLocalCacheData request?.httpShouldHandleCookies = true let dataTask = session.dataTask(with: request!) { (data, response, error) in if error != nil { completionHendler(nil, error as NSError?, false) } do { if data != nil { let resultJson = try JSONSerialization.jsonObject(with: data!, options: []) as? [String:AnyObject] print("Request API = ", apiUrl) print("API Response = ",resultJson ?? "") completionHendler(resultJson, nil, true) } else { completionHendler(nil, error as NSError?, false) } } catch { completionHendler(nil, error as NSError?, false) } } dataTask.resume() } } // Here is example of calling Post API from any class let bodyParameters = String(format: "appid=%@&appversion=%@","1","1") APIManager.sharedInstance.requestApiWithUrlString(param: bodyParameters, apiName: "PASS_API_NAME", requestType: HtttpType.POST.rawValue, isAddCookie: false) { (dictResponse, error, success) in if success { if let dictMessage = dictResponse?["message"] as? Dictionary<String, AnyObject> { // do you work } } else { print("Something went wrong...") } } } /// Or just use simple function func dataRequest() { let urlToRequest = "" // Your API url let url = URL(string: urlToRequest)! let session4 = URLSession.shared let request = NSMutableURLRequest(url: url) request.httpMethod = "POST" request.cachePolicy = NSURLRequest.CachePolicy.reloadIgnoringCacheData let paramString = "data=Hello" request.httpBody = paramString.data(using: String.Encoding.utf8) let task = session4.dataTask(with: request as URLRequest) { (data, response, error) in guard let _: Data = data, let _: URLResponse = response, error == nil else { print("*****error") return } if let dataString = NSString(data: data!, encoding: String.Encoding.utf8.rawValue) { print("****Data: \(dataString)") //JSONSerialization } } task.resume() }
sumber
cepat 4
GUNAKAN ALAMOFIRE di App kami tlg instal file pod
pod 'Alamofire', '~> 4.0'
Kita dapat Menggunakan API untuk Data Json - https://swapi.co/api/people/
Kemudian kita dapat membuat kelas jaringan untuk project- networkingService.swift kita
import Foundation import Alamofire typealias JSON = [String:Any] class networkingService{ static let shared = networkingService() private init() {} func getPeople(success successblock: @escaping (GetPeopleResponse) -> Void) { Alamofire.request("https://swapi.co/api/people/").responseJSON { response in guard let json = response.result.value as? JSON else {return} // print(json) do { let getPeopleResponse = try GetPeopleResponse(json: json) successblock(getPeopleResponse) }catch{} } } func getHomeWorld(homeWorldLink:String,completion: @escaping(String) ->Void){ Alamofire.request(homeWorldLink).responseJSON {(response) in guard let json = response.result.value as? JSON, let name = json["name"] as? String else{return} completion(name) } } }
Kemudian Buat kelas NetworkingError.swift
import Foundation enum networkingError : Error{ case badNetworkigStuff }
Kemudian buat kelas Person.swift
import Foundation struct Person { private let homeWorldLink : String let birthyear : String let gender : String let haircolor : String let eyecolor : String let height : String let mass : String let name : String let skincolor : String init?(json : JSON) { guard let birthyear = json["birth_year"] as? String, let eyecolor = json["eye_color"] as? String, let gender = json["gender"] as? String, let haircolor = json["hair_color"] as? String, let height = json["height"] as? String, let homeWorldLink = json["homeworld"] as? String, let mass = json["mass"] as? String, let name = json["name"] as? String, let skincolor = json["skin_color"] as? String else { return nil } self.homeWorldLink = homeWorldLink self.birthyear = birthyear self.gender = gender self.haircolor = haircolor self.eyecolor = eyecolor self.height = height self.mass = mass self.name = name self.skincolor = skincolor } func homeWorld(_ completion: @escaping (String) -> Void) { networkingService.shared.getHomeWorld(homeWorldLink: homeWorldLink){ (homeWorld) in completion(homeWorld) } } }
Kemudian buat DetailVC.swift
import UIKit class DetailVC: UIViewController { var person :Person! @IBOutlet var name: UILabel! @IBOutlet var birthyear: UILabel! @IBOutlet var homeworld: UILabel! @IBOutlet var eyeColor: UILabel! @IBOutlet var skinColor: UILabel! @IBOutlet var gender: UILabel! @IBOutlet var hairColor: UILabel! @IBOutlet var mass: UILabel! @IBOutlet var height: UILabel! override func viewDidLoad() { super.viewDidLoad() print(person) name.text = person.name birthyear.text = person.birthyear eyeColor.text = person.eyecolor gender.text = person.gender hairColor.text = person.haircolor mass.text = person.mass height.text = person.height skinColor.text = person.skincolor person.homeWorld{(homeWorld) in self.homeworld.text = homeWorld } } }
Kemudian Buat kelas GetPeopleResponse.swift
import Foundation struct GetPeopleResponse { let people : [Person] init(json :JSON) throws { guard let results = json["results"] as? [JSON] else { throw networkingError.badNetworkigStuff} let people = results.map{Person(json: $0)}.flatMap{ $0 } self.people = people } }
Kemudian kelas pengontrol View kami
import UIKit class ViewController: UIViewController { @IBOutlet var tableVieww: UITableView! var people = [Person]() @IBAction func getAction(_ sender: Any) { print("GET") networkingService.shared.getPeople{ response in self.people = response.people self.tableVieww.reloadData() } } override func prepare(for segue: UIStoryboardSegue, sender: Any?) { guard segue.identifier == "peopleToDetails", let detailVC = segue.destination as? DetailVC, let person = sender as AnyObject as? Person else {return} detailVC.person = person } } extension ViewController:UITableViewDataSource{ func numberOfSections(in tableView: UITableView) -> Int { return 1 } func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return people.count } func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell = UITableViewCell() cell.textLabel?.text = people[indexPath.row].name return cell } } extension ViewController:UITableViewDelegate{ func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { performSegue(withIdentifier: "peopleToDetails", sender: people[indexPath.row]) } }
Di StoryBoard kami
plz Hubungkan dengan View kami dengan yang lain menggunakan segue dengan pengenal -peopleToDetails
Gunakan UITableView Dalam Tampilan Pertama kami
Gunakan UIButton Untuk mendapatkan Data
Gunakan 9 Label di DetailVc kami
sumber
Jika Anda bekerja di Swift 3, sintaksnya berubah. Contoh di sini berfungsi untuk saya dan memiliki penjelasan yang baik tentang langkah-langkahnya: https://grokswift.com/simple-rest-with-swift/
Ini adalah kode dari tutorial itu:
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()
sumber
Api Call menggunakan 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()
buat variabel dan hubungkan dengan kelas model
var modelReference = [model]()
buat kelas model 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 }
}
lalu kita dapat terhubung dengan objek tampilan tabel kita
let cell = tableView.dequeueReusableCell(withIdentifier: "TableViewCellID")as! TableViewCell cell.listName.text = modelReference[indexPath.row].name
sumber
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() }
sumber
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() }
Pemakaian:
getAPICalling(mainUrl:"https://dousic.com/api/radiolist?user_id=16")
sumber
Cepat 5
Metode panggilan API
//Send Request with ResultType<Success, Error> func fetch(requestURL:URL,requestType:String,parameter:[String:AnyObject]?,completion:@escaping (Result<Any>) -> () ){ //Check internet connection as per your convenience //Check URL whitespace validation as per your convenience //Show Hud var urlRequest = URLRequest.init(url: requestURL) urlRequest.cachePolicy = .reloadIgnoringLocalCacheData urlRequest.timeoutInterval = 60 urlRequest.httpMethod = String(describing: requestType) urlRequest.setValue("application/json; charset=utf-8", forHTTPHeaderField: "Content-Type") urlRequest.setValue("application/json; charset=utf-8", forHTTPHeaderField: "Accept") //Post URL parameters set as URL body if let params = parameter{ do{ let parameterData = try JSONSerialization.data(withJSONObject:params, options:.prettyPrinted) urlRequest.httpBody = parameterData }catch{ //Hide hude and return error completion(.failure(error)) } } //URL Task to get data URLSession.shared.dataTask(with: requestURL) { (data, response, error) in //Hide Hud //fail completion for Error if let objError = error{ completion(.failure(objError)) } //Validate for blank data and URL response status code if let objData = data,let objURLResponse = response as? HTTPURLResponse{ //We have data validate for JSON and convert in JSON do{ let objResposeJSON = try JSONSerialization.jsonObject(with: objData, options: .mutableContainers) //Check for valid status code 200 else fail with error if objURLResponse.statusCode == 200{ completion(.success(objResposeJSON)) } }catch{ completion(.failure(error)) } } }.resume() }
Penggunaan metode panggilan API
func useOfAPIRequest(){ if let baseGETURL = URL(string:"https://postman-echo.com/get?foo1=bar1&foo2=bar2"){ self.fetch(requestURL: baseGETURL, requestType: "GET", parameter: nil) { (result) in switch result{ case .success(let response) : print("Hello World \(response)") case .failure(let error) : print("Hello World \(error)") } } } }
sumber