如何在 Swift 中为 UIViewController 子类制作自定义初始化程序?

2023-09-08移动开发问题
2

本文介绍了如何在 Swift 中为 UIViewController 子类制作自定义初始化程序?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着跟版网的小编来一起学习吧!

问题描述

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

Apologies if this has been asked before, I've searched around a lot and many answers are from earlier Swift betas when things were different. I can't seem to find a definitive answer.

我想继承 UIViewController 并有一个自定义初始化程序,以便我可以轻松地在代码中设置它.我在 Swift 中遇到了麻烦.

I want to subclass UIViewController and have a custom initializer to allow me to set it up in code easily. I'm having trouble doing this in Swift.

我想要一个 init() 函数,我可以使用它来传递特定的 NSURL,然后我将与视图控制器一起使用.在我看来,它类似于 init(withImageURL: NSURL).如果我添加该函数,它会要求我添加 init(coder: NSCoder) 函数.

I want an init() function that I can use to pass a specific NSURL I'll then use with the view controller. In my mind it looks something like init(withImageURL: NSURL). If I add that function it then asks me to add the init(coder: NSCoder) function.

我相信这是因为它在超类中使用 required 关键字进行了标记?所以我必须在子类中做到这一点?我添加它:

I believe this is because it's marked in the superclass with the required keyword? So I have to do it in the subclass? I add it:

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

现在呢?我的特殊初始化程序被认为是 convenience 吗?指定的?我要调用超级初始化器吗?来自同一个类的初始化器?

Now what? Is my special initializer considered a convenience one? A designated one? Do I call a super initializer? An initializer from the same class?

如何将我的特殊初始化程序添加到 UIViewController 子类中?

How do I add my special initializer onto a UIViewController subclass?

推荐答案

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 中为 UIViewController 子类制作自定义初始化程序?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

The End

相关推荐

在 cocos2d 中添加 UIViewController
Add UIViewController in cocos2d(在 cocos2d 中添加 UIViewController)...
2024-08-12 移动开发问题
4

UIScrollView 和 Cocos2D
UIScrollView and Cocos2D(UIScrollView 和 Cocos2D)...
2024-08-12 移动开发问题
2

正确重启/重新初始化半单例
Properly restarting/re-initializing a semi-singleton(正确重启/重新初始化半单例)...
2024-08-11 移动开发问题
9

对 <GKModalRootViewController: 0xb7e450> 的开始/结束
Unbalanced calls to begin/end appearance transitions for lt;GKModalRootViewController: 0xb7e450gt;(对 lt;GKModalRootViewController: 0xb7e450gt; 的开始/结束外观转换的不平衡调用)...
2024-08-11 移动开发问题
5

无法将文件从捆绑包复制到 iOS 中的文档目录
Can`t copy file from bundle to documents directory in iOS(无法将文件从捆绑包复制到 iOS 中的文档目录)...
2024-04-15 移动开发问题
4

如何复制“字典"在斯威夫特?
How to copy a quot;Dictionaryquot; in Swift?(如何复制“字典在斯威夫特?)...
2024-04-15 移动开发问题
10