18883


あるViewControllerからwebviewを持ったmyWebViewControllerを呼び出すとします。その際に任意のURLを渡します。以下の様なコードです。

[code]

    let myWebViewController = MyWebViewController()
    myWebViewController.url = NSURL(string: "https://google.com")!
    self.navigationController?.showViewController(myWebViewController, sender: nil)
    
[/code]

もしこの場合、urlが渡されなかったとしてもビルドエラーは発生しません。

[code]

    //これでもビルドエラーは起きない
    let myWebViewController = MyWebViewController()
    self.navigationController?.showViewController(myWebViewController, sender: nil)
    
[/code]

urlがnilのままでも、実行されるまで気づく事が出来ません。

これを防ぐためには、どのような書き方が適切でしょうか？  
urlに何かしらのNSURL型がセットされる事を強制したいです。

サンプルコードはこちらに  
<https://github.com/nishiyamaosamu/myWebViewSample>

swift:2.1  
xcode:7.1.1

よろしくお願い致します。


CC BY-SA 3.0
2015-11-16T03:29:16.147
18870
2015-11-16T07:27:17.187
2772
question
swift
UIViewControllerのサブクラスを呼び出す際に、必要な変数が初期化されてなければビルドエラーにするには


下記のように、イニシャライザで`url`パラメータを渡すのを強制するのはどうでしょうか？その上で他のイニシャライザは使えないように、`@available(*,
unavailable)`を指定して、コンパイル時にチェックされるようにします。

[code]

    init(url: String) {
        super.init(nibName: nil, bundle: nil)
        ...
    }
    
    @available(*, unavailable)
    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
    
[/code]


CC BY-SA 3.0
2015-11-16T07:27:17.187
18883
2015-11-16T07:27:17.187
5519
18870
answer