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


90

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

1
@Downvotters :이 질문에 무엇이 잘못되었는지 설명해주세요.
Mani

1
많은 사람들이 빠른 언어를 먼저 배운 다음 글을 써야한다고 생각합니다. 어리석은 감정 ...
JANAK NIRMAL

@Mani 안녕하세요, 당신은 또한 당신이에 해당 유형 별칭을 할당 할 방법을 보여 줄래 var즉, ( var completion: CompletionBlock = {....}? 여러 인수를 사용하여 감사합니다.
Unheilig

답변:


141

함수 유형구문(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+부터 만 필요합니다.


두 개 이상의 논쟁이 필요하다면 어떻게 할 수 있습니까? 저 책이나 다른 책에서 참조하도록 안내해 주시겠습니까?
Mani

Swift를위한 최고의 책 : Apple Inc. "The Swift Programming Language" iBooks. itun.es/ca/jEUH0.l
데이비드 Skrundz

@NSArray 신속하게 사용할 수있는 책은 하나뿐입니다. 하지만 주제가있는 해당 장에 대해 묻습니다 ... :)
Mani

4
@jtbandes 작동 중입니다. I는 다음과 같이 두 개의 인수로 만든typealias CompletionBlock = ( completionName : NSString, flag : Int) -> ()
마니

@zumzum 매개 변수 이름 " reason"을 메소드 본문 " println(reason)" 에서 분리합니다.
jtbandes

13

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

여기 예시들이 있습니다 :

변수로 :

var closureName: (inputTypes) -> (outputType)

선택적 변수로 :

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

유형 별명으로 :

typealias closureType = (inputTypes) -> (outputType)
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.