Swift-Pomises로 Alam ofire 처리 지연 실현 [Swift1.1]
문제점
Swift의 iOS 애플리케이션 개발 중
Alamofire*1 또는 통신 시스템의 함수를 사용하는 경우
호출 내용의 실행이 통신을 끝냅니다
기다리지 않으면 다른 처리가 있다.
의도적인 처리를 실현할 수 없다. 예를 들어
다음 그림에서 보듯이 API 두드리기 결과는 다음과 같습니다.
테이블에 나타나지 않는 슬픈 사례*2도 볼 수 있다.
이런 사태에 대비해서.
javascript/jQuery 근처
Deferred 객체
상태를 사용하여 인스턴스의 가져오기를 모니터링합니다.
이번에는 이 Deferred 객체를 사용하도록 하겠습니다.
지연 처리를 실시하다.
골대
Alamofire 통신이 끝난 후
예기한 처리를 실행하다.
방침.
Deferred 객체를 사용합니다.
Deferred 객체는 처리할 수 없습니다.
진행 중/종료 후/이상 종료 상태
존재 여부를 감시하는 대상입니다.
통신이 끝날 때
완료 후
적어서 계속 처리하고 싶어요.
호출을 사용하면서 {통신}→{의도적 처리}의
순서대로 실현할 수 있다.
특히 jQuery에서 aax와 함께
자주 사용하는 대상입니다.
설치 내용
RokkinCat/Swift-Proomises*3에서
Classes 폴더 아래에 있는 Promise입니다.swift 열기
응용 프로그램 소스 코드에 추가합니다.
Promisses in Swift*4 아래 코드 1 참조
func callAPI() -> Promise
함수를 실현하였다.code1
func uploadFile() -> Promise {
let p = Promise.defer()
dispatch_async(
dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0),
{
let success = self.actualFileUpload()
if !success {
p.reject()
}
dispatch_async(dispatch_get_main_queue(), {
p.resolve()()
})
})
return p
}
MyPageViewController.swift...
let deferred = Deferred()
...
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
callAPI().then{(value) -> () in
self.tableView.registerClass(UITableViewCell.self, forCellReuseIdentifier: "cell")
self.tableView.reloadData()
}
}
func callAPI() -> Promise{
let promise = deferred.promise
Alamofire.request(CRUDRouter.Read(routerName: "users/1/favorites", id: 0))
.responseJSON { (_, _, JSON, _) in
var arr : NSArray = JSON!["comment"]!! as NSArray
for a in arr{
self.items.append(a["comment"]!! as String)
}
self.deferred.resolve("end API calling")
}
return promise
}
결과 달성
다음 표에서
글이 추가된 화면
화면표시 후 0.2초가량 나온다.
Deferred가 설치되어 있지 않은 경우
탭에 두 번째로 보일 때.
처음 표시.
(TableView 설치 방법 정보
여기서 사랑을 끊는다.)
여기서는 Deferred를 사용합니다.
올바른 통신 → 처리 순서
실현 가능하다는 것을 확인했다.
표시된 텍스트는 앞의 것입니다
백엔드에서 HTTP Request 열기
건너뛰었어.
총결산
본 논문에서, 우리는 Alamofire 통신 후에 예상한 처리를 실행하기 위해 Deferred를 사용합니다.
필사적으로 노력했다.
나는 스위프트와 자바스크립트가 매우 비슷하다고 생각한다.
JSON을 호출한 API의 실현을 소개하는 글*5은
네, 그런데 Alam ofire
API 주변을 깔끔하게 쓸 수 있도록, 이게 좋을 것 같아요.
나는 원가가 낮은 실복이라고 생각한다.
추가 Deferred 객체*6도 가능합니다.
이번에는 바로 찾은 물건으로 실시됐다.
참고 문헌
Reference
이 문제에 관하여(Swift-Pomises로 Alam ofire 처리 지연 실현 [Swift1.1]), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/sshojiro/items/5d068ceb515926537ca9텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)