swift의 async를 쓰면 안된다

Tags
swift
 

async 가 없을 때

@objc func getReports( _ fromDate: String, toDate: String, resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock ) -> Void{ if self.reports == nil { reject("0", "createReports 선행 필요", nil) return; } print("test") }
 
// objective-c의 .m 파일 RCT_EXTERN_METHOD( getReports: (NSString *)fromDate toDate: (NSString *)toDate resolve: (RCTPromiseResolveBlock)resolve reject: (RCTPromiseRejectBlock)reject )
 
notion image
에러 없이 잘 실행된다.
swift로 작성한 함수가 obj-c로 잘 변환되어, RN에서 호출에도 문제 없었다.

async를 붙였을 때

@objc func getReports( _ fromDate: String, toDate: String, resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock ) async -> Void{ if self.reports == nil { reject("0", "createReports 선행 필요", nil) return; } print("test") }
 
// objective-c의 .m 파일 RCT_EXTERN_METHOD( getReports: (NSString *)fromDate toDate: (NSString *)toDate resolve: (RCTPromiseResolveBlock)resolve reject: (RCTPromiseRejectBlock)reject )
이건 바꾸지 않았다. 동일하게 export 한다
notion image
메소드를 찾을 수 없다고 나온다.

해결방안

클로저
var reports: Asleep.Reports? let fromDate: String = "2023-05-01" let toDate: String = "2023-05-07" // Closure reports?.reports(from: fromDate, to: toDate, completionBlock: { (reportSessions: [Asleep.Model.SleepSession]?, error: Asleep.AsleepError?) in if let error { print(error) return } if let reportSessions { } }) // Async Task { do { let reportSessions = try await reports?.report(sessionId: sessionId) } catch { print(error) } }
Asleep SDK 설명서에 나와있는 Async를 쓰고 싶었는데, 이건 활용하지 못하고
Closure를 이용하여 해결함