게시글
질문&답변
2020.09.23
completion closure안에 @escaping 질문입니다
답변 감사드립니다. getVideos 함수에 return을 빼고 파라미터에 escaping closure(escapingHandler)를 추가 하였습니다. 후에 requestAVAsset함수의 escaping closure에 escapingHandler를 실행하였습니다. (사진) 문제는 getVideos함수의 requestAVAsset함수 자체를 들어가지 않고 함수를 끝내버립니다(resultHandler 클로저 안의 "In requestAVAsset"이 프린트 되지 않습니다). (사진) getVideos함수의 클로저가 String을 받지 못하고( "In escapingHandler"가 프린트 되지않습니다.) videoURL을 리턴하여 nil error가 발생합니다. requestAVAsset함수 resultHandler 클로저 안 여러군데 escapingHandler를 위치해 보았 는데 다 똑같은 오류가 발생합니다. 이런식으로 escaping Handler처리를 하면 비동기 처리의 끝남을 캐치 할수 없는 건가요? ----------------------- 개인적으로 궁금한 점이 있습니다! escaping Handler가 다른 쓰레드에서 동작하는 비동기 함수 실행의 끝남을 알려 주는데 그 끝남의 결과를 받으려면 어쨌든 비동기 함수를 기다려야 하는게 아닌가 하는 궁금증이 있습니다. (혹시 제가 비동기 함수 자체를 이해하지 못한 상황이라고 생각드시면 강의를 한번더 보라고 말씀부탁드립니다)
- 1
- 9
- 612
질문&답변
2020.09.23
completion closure안에 @escaping 질문입니다
자세한 답변 정말 감사드립니다! PHImageManager의 메서드들이 비동기적으로 구현되어 있다는 것은 메인쓰레드가 아닌 다른 쓰레드 상에서 돌아간다는 뜻이고 비동기적 실행이 끝난후에 requestAVAsset의 resultHandler는 실행이 끝남을 알려주는 방식으로 이해하였습니다. 근데 제가 현재 진행중인 프로젝트가 있는데 requestAVAsset함수를 사용하면 이 함수가 다끝나기 전에 다음 문장으로 넘어가 버립니다. (그래서 url을 얻지 못하고 return부분의 videoURL이 nil되어 오류가 발생합니다)(사진) (사진) requestAVAsset함수의 completion 클로저는 escaping 클로저로써 비동기 실행의 끝남을 알려줘야 하고 값을 받아 videoURL 변수에 집어 넣어줘야 하는데 기다리지 못하고 바로 videoURL을 반환해 버리는 상황을 해결하려면 비동기 실행을 기다려주는 코드를 삽입해야 하나요?
- 1
- 9
- 612
질문&답변
2020.09.23
completion closure안에 @escaping 질문입니다
답변 정말 감사드립니다! escaping 클로저에대해 한가지 더 질문드립니다. 4번째 문단에서 asyncAdd함수의 정의 내부에서 실행을 원하는 큐를 반드시 정해야 한다고 하셨는데 escaping 클로저를 기본적으로 파라미터로 받는 requestImage 함수나 requestAVAsset과 같은 이미지, 동영상을 가져오는 함수에 대해 비동기 처리를 꼭 해주어야 하나요?
- 1
- 9
- 612