Halo Saya telah bekerja kode parsing json untuk swift2.2 tetapi ketika saya menggunakannya untuk Swift 3.0 memberi saya kesalahan itu
ViewController.swift: 132: 31: Referensi rancu ke anggota 'dataTask (dengan: completionHandler :)'
Kode saya di sini
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()
Terima kasih atas ide-idenya.
dataTask(with:
eg yang saya milikiurl = "www.yahoo.com
dan saya meneruskannya langsung ke fungsi tanpa mengubahnya menjadiURL
Jawaban:
Kompiler bingung oleh tanda tangan fungsi. Anda dapat memperbaikinya seperti ini:
Tetapi, perhatikan bahwa kita tidak harus memasukkan "permintaan" seperti
URLRequest
pada tanda tangan ini jika itu dinyatakan sebelumnya sebagaiURLRequest
gantiNSMutableURLRequest
:Ini adalah casting otomatis antara
NSMutableURLRequest
dan yang baruURLRequest
gagal dan yang memaksa kami untuk melakukan casting ini di sini.sumber
var request = URLRequest(url:myUrl!)
URL(string:)
konstruktor gagal?Anda init'd
myRequest
sebagaiNSMutableURLRequest
, Anda membutuhkan ini:Swift membuang kedua
NSMutable...
hal itu. Cukup gunakanvar
untuk kelas baru.sumber
Xcode 8 dan Swift 3.0
Menggunakan URLSession:
URLSession Delegate call:
Menggunakan Block GET / POST / PUT / DELETE:
Bekerja dengan baik untuk saya .. coba 100% jaminan hasil
sumber
Masalah ini disebabkan oleh URLSession memiliki dua metode dataTask
Yang pertama memiliki
URLRequest
sebagai parameter, dan yang keduaURL
sebagai parameter, jadi kita perlu menentukan tipe yang akan dipanggil, misalnya, saya ingin memanggil metode keduasumber
Dalam kasus saya kesalahan ada di NSURL
Di Swift 3 Anda harus menulis URL adil :
sumber
Diuji xcode 8 versi stabil; Perlu menggunakan
var request
variabel denganURLRequest()
Dengan itu Anda dapat dengan mudah memperbaikinya ( bug )var request = URLRequest(url:myUrl!)
DanBekerja dengan baik! Terima kasih kawan, saya pikir banyak membantu orang. !
sumber
var request = URLRequest(url: url); let task = URLSession.shared().dataTask(with: request) { ... }
shared
adalah properti daripada fungsi di Swift 3 (tanpa tanda kurung).Untuk Swift 3 dan Xcode 8:
// Catatan: Anda selalu dapat menggunakan debugger untuk memeriksa kesalahan
sumber
Dalam swift 3 kompiler bingung oleh tanda tangan fungsi. Menentukannya akan menghapus kesalahan. Konversi string url untuk mengetik URL. Kode berikut ini berfungsi untuk saya.
sumber
Jawaban singkat dan ringkas untuk Swift 3:
sumber
sumber
Untuk memuat data melalui permintaan GET Anda tidak perlu
URLRequest
(dan tidak ada titik koma)sumber
sumber
Xcode 10.1 Swift 4
Ini bekerja untuk saya:
Kuncinya adalah menambahkan dalam
URLSessionDataTask
deklarasi tipe.sumber
Bagi saya, saya melakukan ini untuk menemukan,
Tidak bisa digunakan
sumber