我无法让我的Alamofire调用在Swift中执行我的json关闭。下面是我的NetworkingService文件:Alamofire请求在关闭时不被调用
import Foundation
import Alamofire
import SwiftyJSON
class NetworkingService {
static let shared = NetworkingService()
private init() {}
func getSong(completionHandler: @escaping (JSON) -> Void) {
Alamofire.request("http://10.0.1.7/myiosapp/v1/songs.php", method: .get, parameters: nil, encoding: URLEncoding(), headers: nil).responseJSON { (response) in
print(response)
}
}
}
下面是我的模型类,宋:
import Foundation
import SwiftyJSON
struct Song {
let trackName: String
let trackArtist: String
let trackFile: String
// failable intializer
init?(json: JSON) {
guard let trackName = json["track"].string,
let trackArtist = json["artist"].string,
let trackFile = json["file"].string
else { return nil }
self.trackName = trackName
self.trackArtist = trackArtist
self.trackFile = trackFile
}
}
下面是我的HomeController文件中的相关代码:
import UIKit
import SwiftyJSON
class HomeController: UICollectionViewController, UICollectionViewDelegateFlowLayout {
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(true)
showJSON()
}
var songs = [SongTest]()
func showJSON() {
print("This print outs")
NetworkingService.shared.getSong { (json) in
print("This does not print out")
self.songs = []
if let listOfSongs = json["songs"].array {
for item in listOfSongs {
let song = SongTest(json: item)
self.songs.append(song!)
}
for r in self.songs {
print(r.trackName)
print(r.trackArtist)
print(r.trackFile)
}
}
}
}
}
在我的HomeController中,我能够在我的控制台中看到(“此打印输出”)以及来自url的JSON数据,该数据在我的NetworkService文件中进行管理。我在NetworkingService.shared.getSong { (json) in
设置了一个断点。如果JSON数据正在打印出来,它会让我相信在这个关闭中出现错误:(json)
。关于为什么会发生这种情况以及如何解决它的任何想法?
当我尝试调用completionHandler(响应)时出现以下错误:无法将类型为'DataRes ponse'到预期的参数类型'JSON' –
a2b123
我只是编辑我的答案''response.result.value'替换'response'这应该包含与json结果对应的字典 – Maxime
xcode要我downcaset response.result.value为'如! JSON',但这会导致崩溃,并出现以下警告:无法将'__NSSingleEntryDictionaryI'(0x6180002450e8)类型的值转换为'SwiftyJSON.JSON'(0x110078038)。我认为你非常接近,并指出了我非常明显的失误(谢谢!) – a2b123