[ios] swift : 블록 선언과 같은 클로저 선언

Objective-C에서 아래와 같이 블록을 선언 할 수 있습니다.

typedef void (^CompletionBlock) (NSString* completionReason);

나는 이것을 신속하게하려고하는데 오류가 발생합니다.

func completionFunction(NSString* completionReason){ }
typealias CompletionBlock = completionFunction

오류 : 선언되지 않은 ‘completionFunction’사용

정의 :

var completion: CompletionBlock = { }

어떻게하나요?

최신 정보:

@jtbandes의 답변에 따르면 다음과 같이 여러 인수로 클로저를 만들 수 있습니다.

typealias CompletionBlock = ( completionName : NSString, flag : Int) -> ()



답변

함수 유형구문(in) -> out입니다.

typealias CompletionBlock = (NSString?) -> Void
// or
typealias CompletionBlock = (result: NSData?, error: NSError?) -> Void
var completion: CompletionBlock = { reason in print(reason) }
var completion: CompletionBlock = { result, error in print(error) }

입력 유형을 둘러싼 괄호는 Swift 3+부터 만 필요합니다.


답변

여기 은 신속한 폐쇄에 대한 멋진 블로그입니다.

여기 예시들이 있습니다 :

변수로 :

var closureName: (inputTypes) -> (outputType)

선택적 변수로 :

var closureName: ((inputTypes) -> (outputType))?

유형 별명으로 :

typealias closureType = (inputTypes) -> (outputType)


답변