2017-05-24 8 views
-1

Je suis actuellement en train d'essayer de récupérer des données de mySQL avec Swift au format JSON. Je me rends compte que NSURL a été changé en URL. Je suis un autre code plus ancien pour m'aider à traverser cela mais il est démodé. J'ai des erreurs (NSURL/URL) à let request et let task. J'ai besoin d'aide pour le faire correctement. Je vous remercie!Swift NSURL changements swift 3.1

override func viewDidLoad() { 
     super.viewDidLoad() 
     // Do any additional setup after loading the view, typically from a nib. 

     //******************************************************************** 
     //MySQL Url Request 
     let URLRequest = NSURL(string: URLWarrick) 
     //Creating mutable request 
     let request = NSMutableURLRequest(url: URLRequest!) 
     //setting method to post 
     request.httpMethod = "GET" 
     //Task to send request 

     let task = NSURLSession.sharedSession().dataTaskWithRequest(request){ 
      data, response, error in 

      //exiting if there is some error 
      if error != nil{ 
       print("error is \(error)") 
       return; 
      } 

      do { 
       //converting response to NSDictionary 
       var teamJSON: NSDictionary! 
       WarrickJSON = try NSJSONSerialization.JSONObjectWithData(data!, options: .MutableContainers) as? NSDictionary 

       //getting the JSON array teams from the response 
       //let teams: NSArray = teamJSON["teams"] as! NSArray 

       //looping through all the json objects in the array teams 
       //for i in 0 ..< teams.count{ 

        //getting the data at each index 
        //let teamId:Int = teams[i]["id"] as! Int! 
        //let teamName:String = teams[i]["name"] as! String! 
        //let teamMember:Int = teams[i]["member"] as! Int! 

        //displaying the data 
        //print("id -> ", teamId) 
        //print("name -> ", teamName) 
        //print("member -> ", teamMember) 
        //print("===================") 
        //print("") 

       } 
+1

C'est une convention Swift de nommer vos variables en commençant par une lettre minuscule. Un autre problème dans votre code est que 'URLRequest' est un type de structure dans Swift3 donc vous ne pouvez pas l'utiliser comme nom pour votre objet. –

+0

Je suppose qu'il est facile de voir que je suis un débutant autodidacte avec Swift. J'apprécie les commentaires. – Morawiec

Répondre

0

Ceci est une structure typique d'une requête d'URL. GET La requête est la valeur par défaut, donc vous n'avez pas besoin d'avoir un NSMutableURLRequest pour le spécifier.

if let url = URL(string: URLWarrick) { 

    let request = URLRequest(url: url) 

    let session = URLSession.shared 

    let task = session.dataTask(with: request, completionHandler: { (data, response, error) in 

     if let error = error { 

      print(error.localizedDescription) 

      return 
     } 

     if let data = data { 

      if let json = try? JSONSerialization.jsonObject(with: data) { 

       if let dict = json as? Dictionary<String,Any> { 

        if let teams = dict["teams"] as? Array<Dictionary<String,Any>> { 

         for team in teams { 

          guard 

           let id = team["id"] as? Int, 

           let name = team["name"] as? String, 

           let member = team["memeber"] as? Int 

          else { 

           print("Error! - Data for this team is incomplete.") 

           continue 
          } 

          print(id, name, member) 
         } 

         return 
        } 
       } 
      } 
     } 

     print("Error! - Your data was invalid.") 
    }) 

    task.resume() 
} 
+0

Parfait! Ce code était au-delà de toute aide. – Morawiec

0

Vous êtes assez proche du bon format. Pour être correct à Swift 3 devrait ressembler à quelque chose comme ce qui suit:

if let let url = URL(string: URLWarrick) { 
    var request = URLRequest(url: url) 
    request.httpMethod = "GET" 
    var session: URLSession = URLSession.shared 
    let task = session.dataTask(with: request) { (data, response, error) -> Void in 
     // Your completion handler code goes here 
    } 
    task.resume() 
} 

Le plus grand changement est que rapide 3 vous ne avez besoin d'une demande d'URL mutable il est géré correctement maintenant en tant que var. Et puis vous utilisez maintenant URLSession pour envoyer cette demande.

+0

BTW vous n'avez pas besoin d'une demande pour un simple GET vous pouvez simplement utiliser l'URL –

+0

vous pouvez également simplifier cet appel 'let task = session.dataTask (avec: url) {données, réponse, erreur dans // votre code} ' –

+0

Je comprends. A titre d'exemple, la requête était toujours modifiable même si elle n'était plus appelée à l'aide de NSMutableURLRequest. –