সুইফটে REST এপিআই কল করুন


94

আমি একটি REST এপিআইতে জিইটি কল করার জন্য সুইফ্টটি ব্যবহার করার চেষ্টা করছি এবং অসংখ্য টিউটোরিয়াল অনুসরণ করার চেষ্টা করেছি, তবে এটি বের করতে পারছি না। হয় যেহেতু আমি কীভাবে সমস্ত ওবজ-সিকে সুইফটে অনুবাদ করতে পারি তা বুঝতে পারি না বা পদ্ধতিগুলির অর্ধেক অর্ধেকটি হ্রাস করা হয়। কেউ কীভাবে কল করতে জানেন এবং JSON ডেটা ফেরত দিয়েছেন?


অন্যদের খুঁজে পাওয়া যাচ্ছে না আমি দেখেছি, কিন্তু আমি RESTkit ইনস্টল করার চেষ্টা করুন করেনি কিন্তু এটা খুব জটিল হয় এবং Xcode 4. থেকে Xcode 6 অনুবাদ করা হয়নি আমিও চেষ্টা blog.strikeiron.com/bid/63338/...
cclloyd

এই ভিন্ন পদ্ধতিটি দেখুন gist.github.com/higepon/71f18472f6d4cba77870
অ্যালেক্স নোলাসো

4
আমি চেষ্টা করার জন্য আপনাকে পরামর্শ দিচ্ছি Alamofire । এটি একটি বাহ্যিক গ্রন্থাগার যা HTTP অনুরোধ এবং প্রতিক্রিয়া পরিচালনা সহজ করে তোলে (আইএমও)।
আলভারো

সহজ উত্তর এই উত্তর পাওয়া যাবে ।
ডেভিড 72

এই উদাহরণটি দেখুন github.com/hadanischa/ ওয়েদার / ব্লব
মাস্টার /

উত্তর:


68

আপনি এটির মতো করতে পারেন:

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
    }


})

সম্পাদনা করুন: লোকেদের জন্য এটির সমস্যা থাকতে পারে আপনার জেএসওএন প্রবাহটি একটি অ্যারে [] এবং কোনও অবজেক্ট নয়} সুতরাং আপনাকে জসনআরসাল্ট NSArrayপরিবর্তে পরিবর্তিত করতে হবেNSDictionary


6
প্রকৃতপক্ষে ভাষাটি এর জন্য ডিজাইন করা হওয়ায় সুইফটে বন্ধ হওয়ার সাথে অ্যাসিক্রোনাস পদ্ধতিগুলি ব্যবহার করা আরও অনেক ভাল।
ফ্রান্সেস্কু

আমি যখন উপরোক্তটি চেষ্টা করি তখন ডুপ্লিকেট পদ্ধতির নামগুলির কারণে আমি একটি সংকলক ত্রুটি পাই, যদিও তারা বিভিন্ন পরামিতি গ্রহণ করে। এছাড়াও আমি অভিধানে জেএসওএন পার্স করার একটি ছোট উদাহরণ পেতে পারি? আমি যে কোনও একটি অনুবাদ করলে আমি ওবজ-সি জিনিসগুলির কোনওটিই কাজ পাইনি।
cclloyd

4
কোনও কারণে আমি যখন এপিআই কল করি তখন আমি 0x0000000000000000 ত্রুটি পেয়েছি। আমি কিভাবে এটি কাছাকাছি পেতে জানি না। কেউ কি আমাকে সঠিক দিকে নির্দেশ করতে পারে?
টিফানি লো

4
@ টিফানিওয়ে ত্রুটিটি খুঁজে পেয়েছে! অন্য কারও কাছে যদি একটি সুস্পষ্ট সমাধানের প্রয়োজন হয়: যদি আপনার জেএসওএন প্রতিক্রিয়াটি একটি অ্যারের আকারে আসে তবে জসনআরসাল্টকে এনএসআররেয় হিসাবে "কাস্ট করা" হওয়া উচিত।
রোমসারচার

4
এনএসআরএল সংযোগ.সেন্ড অ্যাসিঙ্ক্রোনাস রিকোয়েস্টটি আসলে আইওএস 9 এবং ম্যাকোস 10.11 থেকে বঞ্চিত হয়েছে। সঠিক উত্তরগুলি হ'ল এনএসইউরলসেশন.ডেটটা টাস্কউইথআরল () সম্পর্কিত regarding
ইউসুফ মালি

60

সুইফট 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()

25

আমি মনে করি NSURLSessionএপিআই এই পরিস্থিতিতে আরও ভাল ফিট করে। কারণ আপনি যদি সুইফ্ট কোড লিখেন তবে আপনার প্রকল্পের লক্ষ্য হ'ল কমপক্ষে আইওএস 7 এবং আইওএস 7 NSURLSessionএপিআই সমর্থন করে । যাইহোক এখানে কোড

let url = "YOUR_URL"

NSURLSession.sharedSession().dataTaskWithURL(NSURL(string: url)) { data, response, error in
    // Handle result
}.resume()

4
@ মুস্তফা এই কলটিতে "জিইটি", "পোষ্ট" এর মতো এইচটিটিপি অনুরোধের ধরণটি নির্দিষ্ট করে দেওয়া কি সম্ভব? এছাড়াও আমি কীভাবে এই ক্ষেত্রে কলটির শিরোনাম বা বডিটির মূল্য দিতে পারি?
রেজোয়ান

ডেটা টাস্কউইথআরকয়েস্ট পদ্ধতি রয়েছে। আপনি এটিকে NSURL অনুরোধ বা NSMutable URL অনুরোধ উদাহরণটি পাস করতে পারেন।
মোস্তফা

// Handle resultহতে পারে:let resp = String( data:data!, encoding:NSUTF8StringEncoding)!
জোসে ম্যানুয়েল অ্যাবারকা রদ্রিগেজ

ব্যবহারের চেয়ে অনেক সহজ NSURLSessionConfiguration। আমি মনে করি এটি গ্রহণযোগ্য উত্তর হওয়া উচিত।
কাকুবেই

20

দ্রুত পালটে এনএসআরএলসেশন ব্যবহার করে REST এপিআই অনুরোধগুলির সম্পূর্ণ কোড এখানে

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()

পোস্ট অনুরোধের জন্য ...

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()

আমি আশা করি এটা কাজ করে.


10

দ্রুত 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()

8

সুইফট 4 - অনুরোধ করুন

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()

ব্যতিক্রমগুলিতে আপনার ডোমেন যুক্ত করতে অ্যাপ ট্রান্সপোর্ট সিকিউরিটি সেটিংস কনফিগার করতে ভুলবেন না এবং আপনি যদি এইচটিটিপিএস ব্যবহার না করে শেষ পয়েন্টগুলিতে আঘাত করছেন তবে অনিরাপদ http অনুরোধগুলিকে অনুমতি দিন।

আপনার জেএসওএন প্রতিক্রিয়া থেকে আপনার কোডেবল ম্যাপিংগুলি স্বয়ংক্রিয়ভাবে তৈরি করতে আপনি http://www.json4swift.com/ এর মতো একটি সরঞ্জাম ব্যবহার করতে পারেন ।


4
কাস্টমডটো ক্লাস কি ??
বিজেন্দ্র সিং শেখাওয়াত

@ বিজেন্দ্রসিংহে শেখাওয়াত এটি এমন একটি শ্রেণীর, যা ডিসেবিলাইজেশনের জন্য ব্যবহারযোগ্য কোডযোগ্য ম্যাপিং সহ class আমি পোস্ট করা সেই json4swift লিঙ্কটি আপনার জন্য JSON ডেটার ইনপুট থেকে এটি তৈরি করতে পারে। এটি আপনার ডেটা ট্রান্সফার অবজেক্টটি উপস্থাপনের জন্য মূলত একটি শ্রেণী তৈরি করছে।
জ্যোসুয়া

5

সুইফট 3.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()

5

সুইফট 4

এপি পোস্ট পদ্ধতিতে অ্যালামোফায়ার ব্যবহার করে একটি অ্যাপ তৈরি করুন

এক্সকোড 9 সহ সুইফট 3-এর জন্য পড ফাইল-পড 'অ্যালামোফায়ার', '~> 4.0' ইনস্টল করুন

Webservices.swift ক্লাস তৈরি করুন, আলামোফায়ার আমদানি করুন

স্টোরিবোর্ড ডিজাইন করুন, লগইন দেখুন

ভিউকন্ট্রোলারক্লাসের জন্য নিম্নলিখিত কোডটি .োকান

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)
    }

}

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() }
        }
    }
}

4

দ্রুত 3.3 এবং 4 এ। আমি দুটি পাবলিক মেথড দিয়ে এপিআইমেনজার ক্লাসটি ক্রেট করেছি। কেবলমাত্র প্রয়োজনীয় প্যারামিটার, এপিআই নাম এবং অনুরোধের ধরণটি পাস করুন। আপনি প্রতিক্রিয়া পাবেন তারপরে এটি বন্ধ করে দিন।

 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()
  }

3

দ্রুত 4

আমাদের অ্যাপ্লিকেশন plz ইনস্টল পড ফাইল এ আলামাফায়ার ব্যবহার করুন

পোড 'আলামোফায়ার', '~> 4.0'

আমরা জসন ডেটার জন্য এপিআই ব্যবহার করতে পারি - https://swapi.co/api/people/

তারপরে আমরা আমাদের প্রজেক্ট-নেটওয়ার্কিংসওয়ার্স.সুইফ্টের জন্য একটি নেটওয়ার্কিং ক্লাস তৈরি করতে পারি

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)
        }
}
}

তারপরে নেটওয়ার্কিংআরর.সুইফ্ট ক্লাস তৈরি করুন

import Foundation
enum networkingError : Error{
    case badNetworkigStuff

}

তারপরে পার্সন.সুইফ্ট ক্লাস তৈরি করুন

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)
        }
    }
}

তারপরে বিশদটি তৈরি করুন ail

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
        }
    }
}

তারপরে 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
        }
}

তারপরে আমাদের দেখুন নিয়ামক শ্রেণীর

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])
    }
}

আমাদের স্টোরিবোর্ডে

plz শনাক্তকারী-জনগণ টোডেটেলগুলির সাথে সিগ ব্যবহার করে অন্য একজনের সাথে আমাদের দৃশ্যের সাথে সংযুক্ত হন

  • আমাদের প্রথম দর্শনে ইউআইটিএবলভিউ ব্যবহার করুন

  • ডেটা পাওয়ার জন্য ইউআইবাটন ব্যবহার করুন

  • আমাদের ডিটেইলভিসিতে 9 টি লেবেল ব্যবহার করুন


2

আপনি যদি সুইফ্ট 3-এ কাজ করছেন, বাক্য গঠনটি পরিবর্তন হয়। এখানে উদাহরণটি আমার পক্ষে কাজ করেছে এবং পদক্ষেপগুলির একটি ভাল ব্যাখ্যা রয়েছে: https://grokswift.com/simple-rest-with-swift/

এই টিউটোরিয়াল থেকে কোড:

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

মডেল ক্লাস ব্যবহার করে আপি কল করুন

    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()

একটি পরিবর্তনশীল তৈরি করুন এবং মডেল শ্রেণীর সাথে সংযুক্ত হন

var modelReference = [model]()

নতুন -> সুইফ্ট ক্লাসে একটি মডেল শ্রেণি তৈরি করুন

import Foundation
class model : NSObject{
var name : String
var descriptionStr: String

init(name : String, descriptionStr: String)
{
    self.name = name
    self.descriptionStr = descriptionStr
}

}

তারপরে আমরা আমাদের টেবিল ভিউ অবজেক্টগুলির সাথে সংযোগ করতে পারি

let cell = tableView.dequeueReusableCell(withIdentifier: "TableViewCellID")as! TableViewCell
    cell.listName.text = modelReference[indexPath.row].name

0
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
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()
}

ব্যবহার:

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


0

সুইফট 5

এপিআই কল পদ্ধতি

//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()
    }

এপিআই কল পদ্ধতি ব্যবহার

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)")
                          
                      }
                  }
        }
      
    }
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.