2016-09-15 8 views
6

Ich habe die neueste Version von Xcode (8) aktualisiert und nachdem ich den Code auf Swift 3 aktualisiert habe, hört Alamofire plötzlich auf zu arbeiten und wirft viele Fehler.Alamofire in Swift 3 mit iOS 8

Nach vielen Recherchen finde ich, dass Alamofire für Swift 3 mit iOS9 + kompatibel ist, also muss ich jetzt einen anderen finden, der mit iOS8 + funktioniert.

Wissen Sie, wie kann ich die gleiche Funktionalität wie Alamofire für iOS8 machen?

Antwort

2

Ich habe für iOS 8 keine "echte" Alternative zu Alamofire gefunden, also habe ich versucht, den URLRequest von Apples Swift selbst zu verwenden.

So, hier ist das Beispiel, das ich endlich nach dem Versuch, und zu versuchen, (auch ohne SwiftyJSON):

func searchPosts() -> [Post] { 
    var request = URLRequest(url: URL(string: "https://www.mywebsite.com/searchPosts.php")!) 
    request.httpMethod = "POST" 
    let postString = "" 
    request.httpBody = postString.data(using: .utf8) 
    request.addValue("application/json", forHTTPHeaderField: "Content-Type") 
    request.addValue("application/json", forHTTPHeaderField: "Accept") 

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

     if let httpStatus = response as? HTTPURLResponse, httpStatus.statusCode != 200 { 
      print(httpStatus.statusCode) 
      self.showError() 
     } else { 
      do { 
       self.listPosts = [Post]() 
       // 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] 

       for field in json["posts"] as? [AnyObject] ?? [] { 

        // Create "Post" object 
        let post = Post(
         id: (field["id"])! as! String, 
         title: (field["title"] as! String), 
         alias: (field["alias"] as! String), 
         catid: (field["catid"] as! String), 
         catname: (field["catname"] as! String), 
         date: (field["date"] as! String), 
         image: (field["image"] as! String), 
         introtext: (field["introtext"] as! String), 
         fulltext: (field["fulltext"] as! String) 
        ) 
        self.listPosts.append(post) 
       } 

       DispatchQueue.main.async { 
        self.tableView.reloadData() 
       } 
      } catch { 
       self.showError() 
      } 
     } 
    } 

    task.resume() 

    return listPosts 
} 

Ich hoffe, dass es andere Entwicklern helfen könnte. Ich werde sehr geschätzt, wenn jemand eine andere mögliche Lösung für dieses Problem gefunden hat.

Grüße

+1

Eine Lösung könnte sein AFNetworking zu verwenden (Objective-C). Das ist auch in swift relativ einfach zu bedienen. (Zur Installation siehe http://www.davidebettio.com/use-afnetworking-with-swift/) – Olof

Verwandte Themen