Sto provando a effettuare una richiesta POST nell'istantanea di sviluppo Swift 3 ma, per qualche motivo, la chiamata a NSURLSession. dataTask non riesce con l'errore nel titoloLa richiesta POST nello snapshot di Swift 3 fornisce "riferimento ambiguo al membro" dataTask (con: completionHandler :) '
Ecco il codice che sto usando:.
import Foundation
var err: NSError?
var params: Dictionary<String, String>
var url: String = "http://notreal.com"
var request = NSMutableURLRequest(url: NSURL(string: url)!)
var session = NSURLSession.shared()
request.httpMethod = "POST"
request.httpBody = try NSJSONSerialization.data(withJSONObject: params, options: [])
request.addValue("application/json", forHTTPHeaderField: "Content-Type")
request.addValue("application/json", forHTTPHeaderField: "Accept")
var task = session.dataTask(with: request, completionHandler: {data, response, err -> Void in
print("Entered the completionHandler")
})
task.resume()
l'errore è esattamente:
testy.swift:19:12: error: ambiguous reference to member 'dataTask(with:completionHandler:)'
var task = session.dataTask(with: request, completionHandler: {data, response, err -> Void in
^~~~~~~
Foundation.NSURLSession:2:17: note: found this candidate
public func dataTask(with request: NSURLRequest, completionHandler: (NSData?, NSURLResponse?, NSError?) -> Swift.Void) -> NSURLSessionDataTask
^
Foundation.NSURLSession:3:17: note: found this candidate
public func dataTask(with url: NSURL, completionHandler: (NSData?, NSURLResponse?, NSError?) -> Swift.Void) -> NSURLSessionDataTask
qualcuno può dirmi:
- Perché mi sta dando questo errore
- Come fare con successo una richiesta POST con parametri personalizzati nel più recente snapshot di sviluppo Swift usando Fondazione solo (non sono in grado di usare altre librerie di terze parti in nessun caso)
Grazie!
Modifica: Ho notato che qualcuno ha scritto un duplicato di questa domanda in seguito al mio. La risposta qui è la migliore.
Questo è strano, non riesco a capire perché passare "NSMutableURLRequest' è ambiguo. Non è una sottoclasse di 'NSURL', quindi IDK penserebbe che potrebbe andare lì dentro. – Alexander
Questo è quello che stavo pensando. Può essere il caso che si tratti di un bug, poiché è lo snapshot di sviluppo. –
Puoi provare a disambiguare questa chiamata assegnando 'dataTaskWithRequest: completionHandler:' a una variabile con un'annotazione di tipo specificando che è '(NSURL, (NSData ?, NSURLResponse?, NSError?) -> Swift.Void) -> NSURLSessionDataTask' e quindi chiama quella chiusura – Alexander