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