Hola, tengo un código de análisis json que funciona para swift2.2 pero cuando lo uso para Swift 3.0 me da ese error
ViewController.swift: 132: 31: referencia ambigua al miembro 'dataTask (con: completeHandler :)'
Mis codigos aqui
let listUrlString = "http://bla.com?batchSize=" + String(batchSize) + "&fromIndex=" + String(fromIndex)
let myUrl = URL(string: listUrlString);
let request = NSMutableURLRequest(url:myUrl!);
request.httpMethod = "GET";
let task = URLSession.shared().dataTask(with: request) {
data, response, error in
if error != nil {
print(error!.localizedDescription)
DispatchQueue.main.sync(execute: {
AWLoader.hide()
})
return
}
do {
let json = try JSONSerialization.jsonObject(with: data!, options: .mutableContainers) as? NSArray
if let parseJSON = json {
var items = self.categoryList
items.append(contentsOf: parseJSON as! [String])
if self.fromIndex < items.count {
self.categoryList = items
self.fromIndex = items.count
DispatchQueue.main.async(execute: {
self.categoriesTableView.reloadData()
AWLoader.hide()
})
}else if( self.fromIndex == items.count){
DispatchQueue.main.async(execute: {
AWLoader.hide()
})
}
}
} catch {
AWLoader.hide()
print(error)
}
}
task.resume()
Gracias por las ideas
dataTask(with:
que tenía, por ejemplo,url = "www.yahoo.com
y la estaba pasando directamente a la función sin convertirla en unURL
Respuestas:
El compilador está confundido por la firma de la función. Puedes arreglarlo así:
Pero, tenga en cuenta que no tenemos que emitir "solicitud" como
URLRequest
en esta firma si se declaró antes como enURLRequest
lugar deNSMutableURLRequest
:Este es el casting automático entre
NSMutableURLRequest
y lo nuevoURLRequest
que está fallando y que nos obligó a hacer este casting aquí.fuente
var request = URLRequest(url:myUrl!)
URL(string:)
constructor fallar alguna vez?Has iniciado
myRequest
comoNSMutableURLRequest
, necesitas esto:Swift está abandonando tanto la
NSMutable...
cosa. Solo úsalovar
para las nuevas clases.fuente
Xcode 8 y Swift 3.0
Usando URLSession:
Llamada de delegado de URLSession:
Usando el bloque GET / POST / PUT / DELETE:
Funciona bien para mí ... pruébalo 100% de garantía de resultados
fuente
Este problema es causado por URLSession tiene dos métodos dataTask
El primero tiene
URLRequest
como parámetro, y el segundo tieneURL
como parámetro, por lo que debemos especificar a qué tipo llamar, por ejemplo, quiero llamar al segundo métodofuente
En mi caso el error estaba en NSURL
En Swift 3 debe escribir solo la URL :
fuente
Versión estable probada de xcode 8; Necesitas usar
var request
variables conURLRequest()
With eso puedes arreglarlo fácilmente ( error )var request = URLRequest(url:myUrl!)
YFuncionó bien! Gracias chicos, creo que ayuda a mucha gente. !
fuente
var request = URLRequest(url: url); let task = URLSession.shared().dataTask(with: request) { ... }
shared
es una propiedad en lugar de una función en Swift 3 (sin paréntesis).Para Swift 3 y Xcode 8:
// Nota: siempre puede usar el depurador para verificar el error
fuente
En swift 3, el compilador se confunde con la firma de la función. Al especificarlo se borrará el error. También convierta la cadena de url para escribir URL. El siguiente código funcionó para mí.
fuente
Respuesta breve y concisa para Swift 3:
fuente
fuente
Para cargar datos a través de una solicitud GET, no necesita ninguno
URLRequest
(ni punto y coma)fuente
fuente
Xcode 10.1 Swift 4
Esto funcionó para mí:
La clave fue agregar en la
URLSessionDataTask
declaración de tipo.fuente
Para mí hago esto para encontrar,
No puede usar
fuente