我正在使用 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)
}
}
}
}
我在主视图控制器文件中的一个设置函数中调用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()
里面super.viewDidLoad()
的地方叫这个
我在response in
闭包内设置了断点,我无法触发它们中的任何一个,事实上我认为它完全跳过了整个事情,我不知道为什么。
我正在关注这个 youtube 视频视频指南完全相同的事情,除了他们的请求通过。
我错过了什么?
我正在使用 Swift 4,XCode 10,在 iOS 12.1 上运行,而我的 AlamoFire 版本是4.7
。
1 回答
一切都是关于 async stuff.your 在 func 中声明
NetworkingClient
对象叫setupView
和 Alamofire 使用.background
线程做 stuff.so 时间执行networkingClient.execute
不清楚然后setUpView
deallocate 从内存和所有它的对象都消失了包括NetworkingClient
.so 以防止这只是声明let networkingClient = NetworkingClient()
功能之外