当前位置: 首页 > 面试题库 >

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

牛越
2023-03-14
问题内容

道歉,如果以前已经问过这个问题,我已经搜索了很多,并且许多答案都来自早期Swift的Beta版本,当时情况有所不同。我似乎找不到确切的答案。

我想创建一个子类,UIViewController并有一个自定义的初始化程序,使我可以轻松地在代码中进行设置。我在Swift中无法执行此操作。

我想要一个init()可以用来传递特定参数的函数,NSURL然后将其与视图控制器一起使用。在我看来,它看起来像init(withImageURL: NSURL)。如果我添加了该功能,则要求我添加该init(coder: NSCoder)功能。

我相信这是因为它在超类中用required关键字标记了吗?所以我必须在子类中这样做吗?我添加:

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

怎么办?我的特殊初始化程序被认为是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)
    }
}


 类似资料:
  • 如何向Swift中的子类添加自定义初始化器? 我创建了的一个子类,它看起来如下所示: 如果我加上这个,Xcode会抱怨处初始化。所以我想这也不是解决办法。所以我想知道如何在Swift中将自定义初始化器正确地添加到子类中(因为在Objective-C中这似乎不是问题)?

  • 问题内容: 我有一个称为的子类,我想用一个文件初始化。我不确定如何使用名为xib的文件初始化此类 问题答案: 我测试了这段代码,它很好用: 初始化视图并按如下方式使用它: 要么 更新Swift > = 3.x和Swift> = 4.x

  • Swift 5.x String初始化、定义 1. 字面量初始化字符串 1.1 单行字面量字符串 let str = "some string" 1.2 字面量初始化多行字符串 let str = """ The white Rabbit put on his spectacles. "Where shell I begin, please your Majesty?" he asked. "

  • 本文向大家介绍Swift使用参数自定义初始化,包括了Swift使用参数自定义初始化的使用技巧和注意事项,需要的朋友参考一下 示例 请注意,您不能省略参数标签: 为了允许省略参数标签,请使用下划线_作为标签: 如果参数标签使用一个或多个属性共享名称,请使用self显式设置属性值:            

  • 问题内容: 我正在跟踪Swift和Objective-C Runtime,它适用于常规方法。 我喜欢使用init方法,据我了解,init就像一个类方法。因此,我尝试将初始化作为实例和类方法。但这似乎不起作用 我可以使用Objective C使其工作,只是想知道如何在Swift中使其工作 摘录自我的要旨 问题答案: 为方法创建选择器时,应使用Obj C方法签名作为选择器的基础,因为使用Obj C运行

  • 问题内容: 序列化器很少,例如 我们如何创建自己的自定义序列化程序? 问题答案: 在这里,您有一个示例,将自己的序列化器/解串器用于Kafka消息值。对于Kafka消息密钥是同一回事。 我们希望将MyMessage的序列化版本作为Kafka值发送,并再次将其反序列化为使用方的MyMessage对象。 在生产者端序列化MyMessage。 您应该创建一个实现org.apache.kafka.comm