우리는 코드가 주 스레드를 차단하지 못하도록 모바일 장치에서 많은 비동기 작업을 수행합니다. 이전에는 많은 델리게이트 메소드를 의미했지만 목표-씨의 최근 발전으로 인해 완료 핸들러로 블록에 값을 반환 할 수있었습니다. 물론,우리는 신속하게 많은 일을해야 할 것입니다.

:

- (void)hardProcessingWithString:(NSString *)input withCompletion:(void (^)(NSString *result))block;;

블록 구문을 빌어 먹을 감사합니다! 나는이 물건을 결코 기억할 수 없다

스위프트는 약간의 군더더기 언어 추가 일 필요는 없기 때문에이를 개선 할 수있는 기회가 주어지며,처음부터 구워 질 수 있습니다.

결과는 복잡해 보일 수 있지만(모든 함수 내 선언이 그렇듯이)정말 간단합니다. 이 중첩을 이해하는 한 함수를 인수로 사용하는 함수 정의 일 뿐이므로 신속하게 명확 해집니다:

func hardProcessingWithString(input: String, completion: (result: String) -> Void) {...completion("we finished!")}

여기서 완성 폐쇄는 문자열을 취하여 무효로 반환하는 함수 일뿐입니다. 처음에는이 거꾸로 소리-이 인수로 문자열을 소요? 우리는 문자열을 반환 할! -하지만 우리는 정말로 문자열을 반환하고 싶지 않습니다. 대신,우리는 호출 수신자가 우리에게 준 함수를 호출하고 관련 인수를 제공하고 있습니다.

스위프트 팀의 함수 호출을 단축하는 영리한 방법 덕분에 완료 핸들러를 사용하는 것이 선언하는 것보다 쉽습니다:

hardProcessingWithString("commands") {(result: String) inprint("got back: \(result)")}

이것은 마지막 인수가 클로저 일 때마다 사용할 수있는 후행 클로저입니다. 다소 이상한{() in }구문을 사용하여 비동기 함수에서 클로저를 다시 통과 한 결과를 마술처럼 얻었습니다. 난 정말이 구문 진드기를 만드는 것을 이해하기 위해 스위프트의 깊이를 수직 아직,하지만 지금은 그것이 작동 행복 해요.

답글 남기기

이메일 주소는 공개되지 않습니다.