Swift で UIViewController サブクラスのカスタム初期化子を作成するにはどうすればよいですか? 質問する

Swift で UIViewController サブクラスのカスタム初期化子を作成するにはどうすればよいですか? 質問する

以前に質問されていたら申し訳ありません。いろいろ調べてみましたが、多くの回答は状況が違っていた初期の Swift ベータ版からのものでした。明確な答えが見つからないようです。

UIViewControllerサブクラス化してカスタム初期化子を作成し、コード内で簡単に設定できるようにしたいと考えています。Swift でこれを実行すると問題が発生します。

ビュー コントローラで使用するinit()特定の を渡すために使用できる関数が必要です。私の頭の中では、次のようなものになっています。その関数を追加すると、関数を追加するように求められます。NSURLinit(withImageURL: NSURL)init(coder: NSCoder)

これはスーパークラスでキーワードでマークされているからだと思いますかrequired? ではサブクラスで実行する必要がありますか? 追加します:

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

さて、どうしますか? 私の特別な初期化子はconvenience1 つとみなされますか? 指定されたものですか? スーパー初期化子を呼び出しますか? 同じクラスの初期化子ですか?

特別な初期化子をUIViewControllerサブクラスに追加するにはどうすればよいですか?

ベストアンサー1

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)
    }
}

おすすめ記事