要在非UIViewController类中使用Alamofire的请求或Firebase的查询,您可以使用闭包或委托模式来处理异步请求的结果。
以下是使用闭包模式的示例:
import Alamofire
class APIManager {
static let shared = APIManager()
func makeRequest(url: String, completion: @escaping (Data?, Error?) -> Void) {
Alamofire.request(url).responseData { response in
switch response.result {
case .success(let data):
completion(data, nil)
case .failure(let error):
completion(nil, error)
}
}
}
}
然后,在您的非UIViewController类中,您可以调用makeRequest
方法并使用闭包来处理结果:
class NonUIViewController {
func fetchData() {
let url = "https://api.example.com/data"
APIManager.shared.makeRequest(url: url) { data, error in
if let error = error {
// 处理错误
print("请求失败:\(error.localizedDescription)")
} else if let data = data {
// 处理数据
print("请求成功,数据:\(data)")
}
}
}
}
同样的方法也适用于Firebase的查询。您可以在非UIViewController类中创建一个Firebase实例,并使用闭包处理查询的结果。
使用委托模式的示例:
import Alamofire
protocol APIManagerDelegate: AnyObject {
func didReceiveData(data: Data)
func didFailWithError(error: Error)
}
class APIManager {
weak var delegate: APIManagerDelegate?
func makeRequest(url: String) {
Alamofire.request(url).responseData { response in
switch response.result {
case .success(let data):
self.delegate?.didReceiveData(data: data)
case .failure(let error):
self.delegate?.didFailWithError(error: error)
}
}
}
}
然后,在非UIViewController类中实现APIManagerDelegate
协议,并使用委托模式处理结果:
class NonUIViewController: APIManagerDelegate {
let apiManager = APIManager()
init() {
apiManager.delegate = self
}
func fetchData() {
let url = "https://api.example.com/data"
apiManager.makeRequest(url: url)
}
func didReceiveData(data: Data) {
// 处理数据
print("收到数据:\(data)")
}
func didFailWithError(error: Error) {
// 处理错误
print("请求失败:\(error.localizedDescription)")
}
}
这些示例演示了如何在非UIViewController类中使用闭包或委托模式来处理Alamofire的请求或Firebase的查询。根据您的需求和偏好,您可以选择其中之一来实现您的功能。
上一篇:Alamofire的publishDecodable不向服务器发送请求,但responseDecodable会发送请求。
下一篇:Alamofire的sessionTaskFailed出现了错误,错误码为NSURLErrorDomainCode=-1005。