2014-11-28 4 views
0

두 클래스, ModelViewController이 있습니다. 나는 클로저를 실행해야 할 때 ViewController에서 Model의 메소드를 호출했습니다.오류를 일으키는 클로저 Swift

Model.swift

typealias LoginCompletionBlock =() -> Void 

func registerUser(username : String, emailID email : String, password userPassword : String, profileImage picture : UIImage, registrationMethod method : String, onCompletion completion : LoginCompletionBlock) 
{ 
    //Necessary code for an async request 
} 

// Delegate for getting the registration details 
func registrationSucceededForUser(userID : String, withAccessToken token : String) 
{ 
    LoginCompletionBlock() // Error 'LoginCompletionBlock' is not constructible with '()' 
} 

그리고 ViewController.swift에, 나는이 같은 기능이라고했다 : 난 그냥 신속로 시작하고

@IBAction func signUp(sender: UIButton) 
{ 
    model.registerUser(usernameTextField.text, emailID: emailTextField.text, password: passwordTextField.text, profileImage: profileImageView.image!, registrationMethod: "normal", onCompletion:{ 
     () in 
     //Perform actions after login 
    }) //Error 'Bool' is not a subtype of 'Void' 
} 

를이 내가했던 것입니다. 누구나 폐쇄를 올바르게 사용하는 방법을 알려주고 어떻게이 오류를 피할 수 있습니까? 클로저에 매개 변수로 Bool을 전달해야하며 반환 유형이 없습니다. 내가 클로저를 사용하는 법을 배우려고 할 때부터 코드에 Bool을 포함시키지 않았다.

답변

1

bool을 클로저에 전달해야하는 경우 입력란을() -> Void에서 Bool -> Void로 변경해야합니다. 또한 callback이 매개 변수로 전달되도록 registrationSucceededForUser 함수를 변경해야합니다. 지금은 실제 함수가 아닌 함수 시그니처를 "호출"합니다.

또한 registerUser 함수 시그니처의 일부 줄 바꿈이 읽기 쉽도록 길게 나옵니다.

typealias LoginCompletionBlock = Bool -> Void 
model.registerUser(usernameTextField.text, emailID: emailTextField.text, 
    password: passwordTextField.text, profileImage: profileImageView.image!, 
    registrationMethod: "normal", onCompletion: { 
     success in 
     //Perform actions after login 
    }) 
} 

편집 : 코드에 대한 특정 수정 사항을 추가했습니다. 실제로 유형 오류의 근본 원인을 이해하려면 추가 정보가 필요할 수 있습니다. 인라인 클로저의 본문이 하나의 명령문으로 구성되어 있으면 반환 값으로 유추 할 수 있으므로 Void 반환 유형을 충족하려면 개행과 빈 return 문을 추가해야 할 수도 있습니다.

+0

죄송합니다. 찾지 못했습니다. 올바른 코드 스 니펫을 보여 주시겠습니까? –

+0

예제를 추가했습니다. 이 경우 "성공"은 Bool로 암시 적으로 입력 된 함수에 대한 인수입니다. –

+0

자,이 코드를 사용해 보겠습니다. –

관련 문제