我正在使用 Alamofire 对虚拟数据源执行网络请求 https://jsonplaceholder.typicode.com/posts并在我的应用程序中呈现它。
我有一个名为 NetworkingClient.swift
的文件,它抽象了大部分逻辑并允许重复使用。
public class NetworkingClient {
typealias WebServiceResponse = ([[String: Any]]?, Error?) -> Void
func execute(_ url: URL, completion: @escaping WebServiceResponse) {
Alamofire.request(url).validate().responseJSON { response in
print(response)
if let error = response.error {
completion(nil, error)
} else if let jsonArray = response.result.value as? [[String: Any]] {
completion(jsonArray, nil)
} else if let jsonDict = response.result.value as? [String: Any] {
completion([jsonDict], nil)
}
}
}
}
我在主视图 Controller 文件中的设置函数中调用了 execute
:
func setUpView() {
let networkingClient = NetworkingClient()
let posts_endpoint = "https://jsonplaceholder.typicode.com/posts"
let posts_endpoint_url = URL(string: TEST_URL_STRING)
networkingClient.execute(posts_endpoint_url) { (json, error) in
if let error = error {
print([["error": error]])
} else if let json = json {
print(json)
}
}
}
我在 super.viewDidLoad()
下的 viewDidLoad()
中调用它的地方
我在 response in
闭包中设置了断点,但我无法触发其中任何一个,事实上我认为它完全跳过了整个过程,我不知道为什么。
我正在关注 this youtube video除了他们的请求通过之外,视频指南做完全相同的事情。
我错过了什么?
我使用的是 Swift 4、XCode 10,在 iOS 12.1 上运行,我的 AlamoFire 版本是 4.7
。
最佳答案
这都是关于异步的东西。你在函数中声明 NetworkingClient
对象调用 setupView
和 Alamofire 使用 .background
线程来做东西。所以networkingClient.execute
的执行时间不清楚,之后 setUpView
从内存中释放,它的所有对象都消失了,包括 NetworkingClient
。所以为了防止这种情况只需在函数外声明 let networkingClient = NetworkingClient()
关于ios - Alamofire 忽略设置/处理数据的闭包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53739217/