Search code examples
jsonxcodeswift3alamofire

Use Alomofire for get data from server in Xcode 9


I'm beginner in iOS programming but I work in android so now I stuck in a problem in iOS. I know my question is general but I really need your help! in android for connect to server we do like below:

 Call<String> myList = service.Contact_List("");
        myList.enqueue(new Callback<String>() {
            @Override
            public void onResponse(Call<String> call, Response<String> response) {
                try{
                    ArrayList<Contact> contactArrayList = new ArrayList<>();
                    JSONArray jsonArray = new JSONArray(response.body());

                    for(int i=0 ; i<jsonArray.length() ; i++)
                        contactArrayList.add(gson.fromJson(jsonArray.getJSONObject(i).toString(), Contact.class));

                }catch (Exception e) {
                    Log.d("Catch","Error")
                }finally {

                }
            }

            @Override
            public void onFailure(Call<String> call, Throwable t) {
                Log.d("Failure","Error")
            }
        });

and in xcode I do like below :

let url = URL(string: "http://api.example.com/Contact-List")
Alamofire.request(url!, method: HTTPMethod.post, parameters: param, encoding:  URLEncoding.default, headers: nil).responseJSON { (response) in
   print("response.request")
  print(response.request as Any)  // original URL request
   print("response.response")
    print(response.response as Any) // URL response
    print("response.result.value") 
}

and my result is something like this:

[{"Id":1,"Name":"Mary","TelNumber":"09111111"},{"Id":2,"Name":"Sarah","TelNumber":"09222222"},
{"Id":3,"Name":"Ben","TelNumber":"09333333"}]

now my question is that how can I do like this code in Xcode(swift 3 ):

for(int i=0 ; i<jsonArray.length() ; i++)
                            contactArrayList.add(gson.fromJson(jsonArray.getJSONObject(i).toString(), Contact.class));

in addition, I use ASP.net in server side.

I am really sorry about my long and ambiguous question! thanks for any suggestions.


Solution

  • First create NSObject swift file :

    then add code

    class demo {
    
    var ID: String
    var Name: String
    
    
    init(ID: String, Name: String) {
        self.ID = ID
        self.Name = Name
    
    }
    } 
    

    Try like this way :

    let data = response.result.value
                if data != nil {
                    self.presentWindow.hideToastActivity()
                    if let response = data as? [[String: AnyObject]] {
                        for detail_data in response {
                            let Id = detail_data["Id"] as? String ?? ""
                            let Name = detail_data["Name"] as? String ?? ""
                            let demoObj = demo(ID: ID, Name: Name
                            self.demoObjects.append(demoObj)
                        } 
                    }
                 }
    

    Updated Answer

    for converting string response to JSON

    Sample code will be something like this. Don't forget to handle unwrap stuff

    let data1 = "[{\"Id\": 1,\"Name\": \"Mary\",\"TelNumber\": \"09111111\"},{\"Id\": 2,\"Name\": \"Sarah\",\"TelNumber\": \"09222222\"}]" //your JSON From API Response
        let data = data1.data(using: .utf8)
            do {
                let array = try JSONSerialization.jsonObject(with: data!) as! [[String : Any]]
                    for detail_data in array {
                        let Id = detail_data["Id"] as? Int ?? 00
                        let Name = detail_data["Name"] as? String ?? ""
                        print("Id:",Id)
                        print("Name:",Name)
                        print("****")
                    }
    
    
            } catch {
                print("Exception occured \(error))")
            }