我无法让我的 Alamofire 调用在 Swift 中执行我的 json 闭包。下面是我的 NetworkingService 文件:
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
:
这应该有效:
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)
completionHandler(response.result.value)
}
}
关于swift - Alamofire 请求未被关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45614363/