2017-01-10 12 views
0

UIViewControllerというビュープロパティがviewDidLoad()メソッドをどのように呼び出しているかを理解していません。それは理にかなっていませんが、私はボンネットの下で何が起こっているのか理解したいと思います。私はこれがスウィフトのプログラミングガイドや、おそらくAppleのリファレンスガイドUIViewControllerで説明されていると確信していますが、今はあまりにも冗長でかなり理解しています。 Swiftプログラミングガイドで説明されている場合、私はそれをさらに研究する正しい用語か、このプロセスがどのように機能するかについてはわかりません。多分計算されたプロパティ?しかし、私は計算されたプロパティについて学んだことから、計算されたプロパティは、その変数を新しい値に設定したり、初期値に設定したりするために何らかの種類のロジックを実行するということです。私が悩んでいるのは、プロパティがクラス内の関数をどのように呼び出すかの概念を理解することです。最も具体的にはUIViewControllerviewDidLoadメソッドを呼び出すビュープロパティです。ここでviewプロパティはviewDidLoad関数をどのように呼び出しますか?

は、私は、この全体につまずく助けたことに私のコードです:

import UIKit 

class ItemListViewController: UIViewController { 

    var tableView: UITableView? 

    override func viewDidLoad() { 
     tableView = UITableView() 
    } 

} 
+1

「UIViewControllerビュー」、「UIViewController loadView」のドキュメントを読んでください。と 'UIViewController viewDidLoad'とそれがどのように動作するか知っているでしょう。 – rmaddy

+1

FYI - あなたの質問はSwiftとは関係ありません。これは、使用する言語に関係なく、 'UIViewController'クラスの関数です。 – rmaddy

+0

@rmaddyありがとうと私はあなたが言っていることを理解していますが、参照を読んだ後、 "このプロパティにアクセスし、その値が現在nilであれば、View Controllerは自動的にloadView()メソッドを呼び出し、結果のビューを返します。 。私はAppleがこれを可能にした方法を知るために何を研究するのか興味がありますか?そのプロパティの1つにアクセスするだけで関数がどのように呼び出されるかを知るために、オンラインで何を検索しますか? –

答えて

1

ここではおそらく私たちが持っていない(何が起こっているかの大まかな概要があります:ここでは

func test_OnViewDidLoad_tableViewIsSet(){ 

     let storyboard = UIStoryboard.init(name: "Main", bundle: nil) 

     let viewController = storyboard.instantiateViewController(withIdentifier: "ItemListViewController") 

     let sut = viewController as! ItemListViewController 

     _ = sut.view 

     XCTAssertNotNil(sut.tableView) 

    } 

は私のサブクラスのUIViewControllerでありますソースコードはUIViewController(Objective-Cで書かれています))。

class UIViewController: UIResponder { 
    private var _view: UIView! 

    var view: UIView! { 
     get { 
      if _view == nil { 
       loadView() 
       if _view != nil { 
        viewDidLoad() 
       } 
      } 

      return _view 
     } 
     set { 
      _view = newValue 
     } 
    } 
} 

私はそれによりがあると確信しているが、これはあなたにどのようにloadView大まかなアイデアを与えるとviewDidLoad単にviewプロパティにアクセスすることで呼び出されてしまうはずです。

+0

これはとても興味深く、ビューのプロパティで完全にこの概念を理解するために必要なものです。もっと理にかなっていますが、現在はゲッタ/セッタのプロパティを使用することで可能性をより確信しています。非常に感謝しています。 –

関連する問題