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) -> ()
답변
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)