如何在swift中使用Alamofire从API中提取数千个数据



我创建了一个事件应用程序,其中应用程序用于注册事件的参与者。参与者列表将被拉到API url。当吸引20到400多名参与者时,需要1秒到3分钟。但当吸引数千名参与者时,需要15分钟或更长时间才能完成。我不知道是互联网连接出了问题还是设备出了问题,因为在我的设备中,我安装了另一个应用程序,它还提取了数千个数据,但只需要5分钟就可以完成。希望我解释得好。请帮我解决它,因为我正处于用户测试阶段。如果你需要我的代码来提取我在下面包含的数据。非常感谢。

APIService.swift

func getParticipants(enteredPincode: String,
participantType: ParticipantType,
completionHandler: @escaping (([Attendee]?, NetworkError?) -> Void))
{
guard let attendeesURL = URL(string: "(GET_PARTICIPANTS_URL)/(enteredPincode)/(participantType)") else {
completionHandler(nil, .invalidURL)
return
}
let sessionManager = Alamofire.SessionManager.default
sessionManager.session.getAllTasks { (tasks) in
tasks.forEach({ $0.cancel() })
}
Alamofire.request(attendeesURL, method: .get, encoding: JSONEncoding.default).responseJSON(completionHandler: { (response) in
guard HelperMethod.reachability(responseResult: response.result) else {
completionHandler(nil, .noNetwork)
return
}

if let statusCode = response.response?.statusCode {
switch(statusCode) {
case 200:
if let jsonArray = response.result.value as? [[String : Any]] {
for anItem in jsonArray {
if let eventparticipants = anItem["event_participants"] as? [[String : Any]] {
var extractedAttendees = [Attendee]()
for participants in eventparticipants{
let attendee = Attendee.init(JSON: participants)
extractedAttendees.append(attendee!)
extractedAttendees = extractedAttendees.sorted(by: { (Obj1, Obj2) -> Bool in
let Obj1_Name = Obj1.lastName
let Obj2_Name = Obj2.lastName
return (Obj1_Name.localizedCompare(Obj2_Name) == .orderedAscending)
})
}
completionHandler(extractedAttendees, nil)
}
}
}

case 400:
completionHandler(nil, .badRequest)
case 404:
completionHandler(nil, .invalidCredentials)
case 409:
completionHandler(nil, .notSuccessful)
case 500:
completionHandler(nil, .serverError)
default:
completionHandler(nil, .uncapturedStatusCode)

}
}
})
}

两个有助于加快速度的想法。

  1. 对API进行分页,这样您就不必在一个请求中下载所有与会者。用户不能一次看到所有内容,那么为什么要一次下载所有内容呢?

  2. 在将与会者发送给你之前,让服务器对他们进行排序,这样你就不必自己花时间了。

相关内容

  • 没有找到相关文章

最新更新