道歉,如果以前已经问过这个问题,我已经搜索了很多,并且许多答案都来自早期Swift的Beta版本,当时情况有所不同。我似乎找不到确切的答案。
我想创建一个子类,UIViewController并有一个自定义的初始化程序,使我可以轻松地在代码中进行设置。我在Swift中无法执行此操作。
UIViewController
我想要一个init()可以用来传递特定参数的函数,NSURL然后将其与视图控制器一起使用。在我看来,它看起来像init(withImageURL: NSURL)。如果我添加了该功能,则要求我添加该init(coder: NSCoder)功能。
init()
NSURL
init(withImageURL: NSURL)
init(coder: NSCoder)
我相信这是因为它在超类中用required关键字标记了吗?所以我必须在子类中这样做吗?我添加:
required
required init(coder aDecoder: NSCoder) { super.init(coder: aDecoder) }
怎么办?我的特殊初始化程序被认为是convenience一个吗?指定一个?我叫超级初始化器吗?来自同一类的初始值设定项?
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 /* Xcode 6 required init(coder aDecoder: NSCoder) { super.init(coder: aDecoder) } */ // Xcode 7 & 8 required init?(coder aDecoder: NSCoder) { super.init(coder: aDecoder) } }