swift - 如何在 Swift 中为 UIViewController 子类创建自定义初始值设定项?

标签 swift uiviewcontroller initialization

如果之前有人问过这个问题,我深表歉意,我已经搜索了很多,许多答案来自早期的 Swift 测试版,当时情况有所不同。我似乎找不到明确的答案。

我想要子类化 UIViewController 并拥有一个自定义初始值设定项,以便我可以轻松地在代码中进行设置。我在 Swift 中执行此操作时遇到问题。

我想要一个 init() 函数,我可以用它来传递特定的 NSURL 然后我将与 View Controller 一起使用。在我看来,它看起来像 init(withImageURL: NSURL)。如果我添加该函数,它会要求我添加 init(coder: NSCoder) 函数。

我相信这是因为它在父类(super class)中用 required 关键字标记?那我必须在子类中做吗?我补充一下:

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

现在怎么办?我的特殊初始化器是否被认为是一种方便初始化器?指定的一个?我要调用 super 初始化程序吗?来自同一个类的初始化器?

如何将特殊的初始化程序添加到 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)
    }
}

关于swift - 如何在 Swift 中为 UIViewController 子类创建自定义初始值设定项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39540119/

相关文章:

c++ - 您将如何使用 C++11 初始化函数结果的 const vector ?

c++ - 未初始化的 int 值始终相同 (C++)

IOS开发(Swift) : If value exists, 取当前数组索引的值

ios - 如何将 .xib 界面设置为自定义标注 View ?

iphone - 自定义 UIView 和 UIViewController 最佳实践?

iOS:rootController 中的方法不会被调用

c# - 如何使用 HttpClient 进行 OAuth2.0 请求 västrafik api

ios - 在 Swift 的另一个类中声明 self

uiview - 使用presentViewController(或其他技术)显示 View 但不是全屏模式?

java - JSP在哪里初始化?