簡體   English   中英

如何子類化UIViewController並快速添加屬性?

[英]How to subclass a UIViewController and add properties in swift?

我想在Swift中創建一種新型的視圖控制器,該控制器具有必須顯式初始化的其他屬性。 該屬性為nil或具有默認值沒有任何意義,並且該控制器將僅通過編程方式進行初始化。 我試圖這樣定義它:

class MyController : UIViewController {
  var prop: Int
  init(prop: Int) {
    self.prop = prop
    super.init()
  }

  required init(coder aDecoder: NSCoder?) {
    fatalError("don't serialize this")
  }
}

我嘗試運行此程序,但由於super.init()嘗試運行未定義的nib構造函數而導致崩潰,因此我嘗試添加該函數:

override init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: NSBundle?) {
  super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil)
}

但是現在編譯器抱怨prop沒有被初始化。 這是我的問題: 如何在此處正確初始化prop 我不需要默認值,並且我設置的任何內容都將覆蓋在其他初始化程序中設置的正確值。

我通過在筆尖初始化中設置一些默認值來破解它,但是隨后讓我的第一個初始化執行此操作

self.prop = prop
super.init()
self.prop = prop

但是除了真正的怪異和丑陋之外,這令我擔心,現在可以從筆尖初始化視圖控制器並最終得到默認值了,這很糟糕。

在Swift中執行此操作的正確且慣用的方法是什么?

在某個時候,必須通過調用init(nibName:bundle:)init(coder:)初始化視圖控制器。

嘗試這個:

class MyViewController: UIViewController {

    var prop: Int

    init(prop: Int, nibName nibNameOrNil: String? = nil, bundle nibBundleOrNil: Bundle? = nil) {
        self.prop = prop
        super.init(nibName:nibNameOrNil, bundle: nibBundleOrNil)
    }

    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }

}

嘗試以下

class MyController: UIViewController {

    var prop: Int

    required init?(coder aDecoder: NSCoder) {
        fatalError()
    }

    init(prop: Int) {
        self.prop = prop
        super.init(nibName: nil, bundle: nil)
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM