Olá, eu estou trabalhando com o código de análise do json para o swift2.2, mas quando eu o uso para o Swift 3.0 me dá esse erro
ViewController.swift: 132: 31: referência ambígua ao membro 'dataTask (com: conclusãoHandler :)'
Meus códigos 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()
Obrigado por idéias.
dataTask(with:
exemplo que eu tinhaurl = "www.yahoo.com
e eu estava passando-o direto para a função , sem convertê-lo para umURL
Respostas:
O compilador é confundido pela assinatura da função. Você pode corrigi-lo assim:
Mas observe que não precisamos converter "request" como
URLRequest
nesta assinatura se ele tiver sido declarado anteriormente como emURLRequest
vez deNSMutableURLRequest
:Esse é o elenco automático entre
NSMutableURLRequest
o novo e oURLRequest
que está falhando e que nos forçou a fazer esse elenco aqui.fonte
var request = URLRequest(url:myUrl!)
URL(string:)
construtor pode falhar?Você iniciou
myRequest
comoNSMutableURLRequest
, precisa do seguinte:Swift está abandonando a
NSMutable...
coisa. Basta usarvar
para as novas classes.fonte
Xcode 8 e Swift 3.0
Usando URLSession:
Chamada de delegado do URLSession:
Usando o bloco GET / POST / PUT / DELETE:
Trabalhando bem para mim .. tente 100% garantia de resultado
fonte
Esse problema é causado pelo URLSession tem dois métodos dataTask
O primeiro tem
URLRequest
como parâmetro e o segundoURL
como parâmetro, portanto, precisamos especificar qual tipo chamar, por exemplo, quero chamar o segundo métodofonte
No meu caso, o erro estava em NSURL
No Swift 3, você deve escrever apenas o URL :
fonte
Versão estável testada do xcode 8; Precisa usar
var request
variável comURLRequest()
With thats, você pode facilmente corrigir isso ( bug )var request = URLRequest(url:myUrl!)
EFuncionou bem! Obrigado pessoal, acho que ajudar muitas pessoas. !
fonte
var request = URLRequest(url: url); let task = URLSession.shared().dataTask(with: request) { ... }
shared
é uma propriedade e não uma função no Swift 3 (sem parênteses).Para Swift 3 e Xcode 8:
// Nota: você sempre pode usar o depurador para verificar o erro
fonte
No swift 3, o compilador é confundido pela assinatura da função. Especificá-lo limpará o erro. Converta também a string do URL no tipo URL. O código a seguir funcionou para mim.
fonte
Resposta curta e concisa para o Swift 3:
fonte
fonte
Para carregar dados por meio de uma solicitação GET, você não precisa de nenhum
URLRequest
(e nenhum ponto e vírgula)fonte
fonte
Xcode 10.1 Swift 4
Isso funcionou para mim:
A chave estava adicionando na
URLSessionDataTask
declaração de tipo.fonte
Para mim, eu faço isso para encontrar,
Não pode usar
fonte