Consider the below piece of code, its written in Swift and it uses Async/Await.
@objc
func sayHello(operation: String) async throws -> String {
// some code here
return "Tom"
}
In order to use this code in Swift, you would do this
Task {
try await sayHello("tom")
}
This can be called from objective-c directly as follows
- (void)sayHelloWithOperation:(NSString *)operation completionHandler:(void (^)(NSString * _Nullable, NSError * _Nullable))completionHandler;
The Objective-C method implementation synthesized by the compiler will create a detached task that calls the async Swift method perform(operation:) with the given string, then (if the completion handler argument is not nil) forwards the result to the completion handler.
The synthesized Objective-C method implementation will create a detached task that calls the async throws method sayHello(operation:). If the method returns normally, the String result will be delivered to the completion handler in the first parameter and the second parameter (NSError *) will be passed nil. If the method throws, the first parameter will be passed nil (which is why it has been made _Nullable despite being non-optional in Swift) and the second parameter will receive the error. If there are non-pointer parameters, they will be passed zero-initialized memory in the non-error arguments to provide consistent behavior for callers.
Leave a Reply