2014-12-05 1 views
1

이 코드와 함께 루트 뷰 컨트롤러에 터지는 매우 간단한 지연 할 노력하고 있어요 : 내가 뭔가를 가지고 있다고 가정dispatch_after 오류 : '[AnyObject]?' 의 하위 유형이 아닌 '무효'

let delay = 1 * Double(NSEC_PER_SEC) 
let time = dispatch_time(DISPATCH_TIME_NOW, Int64(delay)) 
dispatch_after(time, dispatch_get_main_queue(), { 
    self.navigationController?.popToRootViewControllerAnimated(true) 
}) 

아직 내가 오류 '[AnyObject]?' is not a subtype of 'Void'을 얻고을 블록/클로저 내에서 self.navigationController을 호출하는 것과 관련이 있습니다. 왜냐하면 그 라인을 주석 처리하고 println("Will this compile")으로 대체하면 작동하기 때문입니다.

누군가 내가 왜이 오류가 발생하는지 설명하고 내가하려고하는 것을 달성하기위한 올바른 방법은 무엇입니까? 6.1.1

엑스 코드 감사합니다.

+0

self.navigationController을 (참) .popToRootViewControllerAnimated 반환 값으로 [AnyOject] 반환합니다. 하지만 dispatch_after()에는 블록 반환 유형이 Void로 설정되어 있습니다. 문제가 있습니다. – Suresh

답변

6

신속한 단일 명령문 클로저는 명령문 리턴 값을 자동으로 리턴합니다. 구체적으로는 [AnyObject]?의 인스턴스를 반환하려고 시도하는 것입니다. 반환 값은 popToRootViewControllerAnimated입니다. dispatch_after으로 예상되는 폐쇄는 대신 Void -> Void입니다. 클로저 리턴 타입이 일치하지 않기 때문에, 컴파일러는 그것에 대해 불평합니다.

은 단순히 명시 적 return 문을 추가 문제를 해결하려면?

dispatch_after(time, dispatch_get_main_queue(), { 
    self.navigationController?.popToRootViewControllerAnimated(true) 
    return 
    ^^^ 
}) 
+0

아, 좋습니다. 완벽합니다. 'popToRootViewControllerAnimated'에 의해 반환 된 에러와 타입을 보았을 때, 나는 그것을 보았습니다. 그러나 아무것도 반환하지 않을 것이라고 생각했기 때문에 왜 나는 그 에러를 얻었는지 이해하지 못했습니다. 매일 학교 일, 감사합니다 안토니오 – sbarow

관련 문제