1. ホーム
  2. swift

[解決済み] Swift で UIViewController のサブクラス用のカスタムイニシャライザを作るには?

2022-09-17 14:43:11

質問

これが以前に質問されたのであれば謝罪します。私は決定的な答えを見つけることができないようです。

私はサブクラス UIViewController をサブクラス化し、コードで簡単にセットアップできるようにするためにカスタムイニシャライザを持ちたいと思います。私はSwiftでこれを行うのに苦労しています。

私は init() 関数で、特定の NSURL を渡すために使用することができます。私の頭の中では、次のように見えます。 init(withImageURL: NSURL) . この関数を追加すると、次に init(coder: NSCoder) 関数を追加するように要求されます。

これは、スーパークラスでマークされているためだと思います。 required というキーワードでマークされているからではないでしょうか?だから、私はそれをサブクラスで行う必要がありますか?私はそれを追加します。

required init(coder aDecoder: NSCoder) {
    super.init(coder: aDecoder)
}

さて、どうでしょう?私の特別なイニシャライザーは convenience とみなされるのでしょうか?指定されたもの?スーパーイニシャライザーを呼び出すか?同じクラスのイニシャライザー?

特別なイニシャライザーを UIViewController サブクラスに追加するには?

どのように解決するのですか?

class ViewController: UIViewController {
        
    var imageURL: NSURL?
    
    // this is a convenient way to create this view controller without a imageURL
    convenience init() {
        self.init(imageURL: nil)
    }
    
    init(imageURL: NSURL?) {
        self.imageURL = imageURL
        super.init(nibName: nil, bundle: nil)
    }
    
    // if this view controller is loaded from a storyboard, imageURL will be nil
    
    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
    }
}