2014-10-13 3 views
0

을 제기 : 첫 번째에서 는 테스트 코드되어 다음과 같은 오류를

enter image description here

에서, onComplete를 기능은 선택 아닌, 모든 것이 괜찮습니다.

그러나 두 번째 오류는 오류가 발생합니다.

누구든지 내게 설명 할 수 있습니까?


업데이트

오류 메시지는 다음과 같습니다

enter image description here

+0

당신은 함수가 선택 사항 인 경우 일어날 무엇을 기대할 수있을 것입니다

당신은 animations 폐쇄의 반환 형식을 보장하기 위해 다음과 같이해야합니까? –

+0

@ 루카스, 콜백이 없기 때문에 (onComplete = nil), 그런 상황에서 아무 일도 일어나지 않기를 바래요. – HanXu

+0

어떤 오류 메시지가 표시됩니까? –

답변

3

, 때문에 스위프트의 단일 표현 폐쇄 implicitly returns the result of expression.

당신의 blankBlock이 ()->Void, onComplete?() 반환 Void? 유형 (즉 Void 또는 nil) 인 경우에도 마찬가지입니다. Void

func test2(onComplete: blankBlock?) { 
    UIView.animateWithDuration(1.0, animations: {() -> Void in 
     onComplete?() 
     return // <-- return Void explicitly 
    }) 
} 
3

이 경우 두 가지 옵션이 있습니다. 당신은 onComplete를 블록이 존재하지 않을 것이다 알고 있다면, 당신은 다음과 같습니다 언랩을 강제 할 수

func test2(onComplete: blankBlock?) { 
    UIView.animateWithDuration(1.0, animations: { 
     completeBlock!() 
    }) 
} 

의 onComplete 블록이 존재한다면 당신이 모르는 경우에, 당신은 값이이 같은 존재로 테스트 할 수 있습니다 (추천 된 방법) :

func test2(onComplete: blankBlock?) { 
    UIView.animateWithDuration(1.0, animations: { 
     if let validBlock = onComplete { 
      validBlock() 
     } 
    }) 
} 

편집 코멘트 : 나는 당신의 입장을 본다. 나는 이것이 onComplete?()에 대한 호출이 실제로 되돌아 오는 이유 때문이라고 주장 할 것입니다. 선택적 함수이기 때문에 실행하거나 nil을 반환합니다. 그러나 animateWithDuration (_ : animations :)에서는 블록에 대해 Void를 반환 할 것으로 예상하지만,이 경우 올바르지 않은 반환 가능성이 있습니다. 내가 믿을 이유는 다음에 코드를 변경하면 문제를 해결할 수 있기 때문이다

func test2(onComplete: blankBlock?) { 
    UIView.animateWithDuration(1.0, animations: { 
     onComplete?() 
     return 
    }) 
} 
+0

나는이 두 가지 옵션을 알고 있습니다. 하지만 내 질문은, "func? (...)"이 자동으로 대소 문자를 처리하는 선택적 함수를 호출하는 올바른 방법이라고 생각합니다. 내가 여기서 왜 못 할거야? – HanXu

관련 문제