gpt4 book ai didi

ios - 如何子类化 UIViewController 并快速添加属性?

转载 作者:搜寻专家 更新时间:2023-11-01 07:02:22 25 4
gpt4 key购买 nike

我想在 Swift 中创建一种新的 View Controller ,它有一个必须显式初始化的附加属性。此属性为 nil 或具有默认值没有任何意义,并且 Controller 只会以编程方式初始化。我试过这样定义它:

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我不想要默认值,我设置的任何内容都会覆盖我在另一个初始化程序。

我通过在 nib init 中设置一些默认值来绕过它,然后让我的第一个 init 这样做

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

但除了真的很奇怪和丑陋之外,这让我担心现在可以从 nib 初始化我的 View Controller 并以默认值结束,这很糟糕。

在 Swift 中执行此操作的正确且惯用的方法是什么?

最佳答案

在某些时候,必须通过调用 init(nibName:bundle:)init(coder:)

来初始化 View Controller

试试这个:

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")
}

}

关于ios - 如何子类化 UIViewController 并快速添加属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50393255/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com