을 제기 : 첫 번째에서 는 테스트 코드되어 다음과 같은 오류를
에서, onComplete를 기능은 선택 아닌, 모든 것이 괜찮습니다.그러나 두 번째 오류는 오류가 발생합니다.
누구든지 내게 설명 할 수 있습니까?
업데이트
오류 메시지는 다음과 같습니다
을 제기 : 첫 번째에서 는 테스트 코드되어 다음과 같은 오류를
에서, onComplete를 기능은 선택 아닌, 모든 것이 괜찮습니다.그러나 두 번째 오류는 오류가 발생합니다.
누구든지 내게 설명 할 수 있습니까?
업데이트
오류 메시지는 다음과 같습니다
, 때문에 스위프트의 단일 표현 폐쇄 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
})
}
이 경우 두 가지 옵션이 있습니다. 당신은 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
})
}
나는이 두 가지 옵션을 알고 있습니다. 하지만 내 질문은, "func? (...)"이 자동으로 대소 문자를 처리하는 선택적 함수를 호출하는 올바른 방법이라고 생각합니다. 내가 여기서 왜 못 할거야? – HanXu
당신은 함수가 선택 사항 인 경우 일어날 무엇을 기대할 수있을 것입니다
당신은
animations
폐쇄의 반환 형식을 보장하기 위해 다음과 같이해야합니까? –@ 루카스, 콜백이 없기 때문에 (onComplete = nil), 그런 상황에서 아무 일도 일어나지 않기를 바래요. – HanXu
어떤 오류 메시지가 표시됩니까? –