UIStoryboard의 instantiateViewController(withIdentifier:)
메서드를 사용하여보기 컨트롤러를 인스턴스화 한 후 키워드를 사용하여 다운 캐스트해야하는 이유는보기 컨트롤러의 속성에 액세스 할 수 있도록하기 위해서입니다. UIStoryboard 메서드 instantiateViewController(withIdentifier:)
은 이미 UIViewController
을 반환하며 스토리 보드 ID을 기반으로하는 클래스를 알고 있거나 이것이 실제로 발생한다고 가정하지만 완전히 사실은 아닙니다.Swift에서 instantiateViewController (withIdentifier :)를 사용한 후 다운 캐스팅이 필요한 이유
다음 코드는 작동하고 컴파일되지만 왜 그 이유를 알고 싶습니다. 문서를 기반으로 이것을 작성하는 경우, 다운 캐스팅이 필요하다고 가정하지 않았으므로 기능에서 반환되는 유형 및/또는 객체와 관련하여 내가 배웠거나 이해하지 못한 부분을 파악하려고합니다.
func test_TableViewIsNotNilOnViewDidLoad() {
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let viewController = storyboard.instantiateViewController(
withIdentifier: "ItemListViewController")
let sut = viewController as! ItemListViewController
_ = sut.view
XCTAssertNotNil(sut.tableView)
}
'withIdentifier : "ItemListViewController"는 스토리 보드에서 View Controller의 ID를 참조하고'UIViewController' 클래스 유형을 반환하기 때문에 연관된 UIViewController 클래스를 반환하지 않습니다. 그래서 Down-casting에 의해 Class를 할당합니다. –
그냥 선언문을 읽으십시오! 'func instantiateViewController (식별자 식별자와 함께) -> UIViewController' 아주 간단합니다. – matt