gpt4 book ai didi

ios - 在 Swift 3 中覆盖 UIViewController init

转载 作者:行者123 更新时间:2023-11-28 06:19:51 25 4
gpt4 key购买 nike

在 Objective-C 应用程序中,当从另一个类初始化类时,我对 loadData 进行了一些自定义初始化:

- (id)init {
self = [super init];
if (self) {
[self loadData];
}
return self;
}

我需要这个来添加更多数据:

MyViewController *vc = [(MyViewController*)[MyViewController alloc]init];
[vc addMoreData: data];

当我尝试将其转换为 Swift 3 时,我对如何进行转换感到困惑。当我添加 init 方法时,它迫使我添加参数,这是我不想要的(或者我想要?)。它还让我添加所需的 init(coder:)。我怎样才能简单地初始化 ViewController 类并在 ViewController 中覆盖它?

最佳答案

在Swift中,一个类应该在initializer方法中初始化所有的non-optional属性,或者non-optional属性应该有default值(value)。

Swift 编译器强制为符合 NSCoding 协议(protocol)的类添加 init?(coder:)

class MyViewController :UIViewController {

var helpText :String = "" //non-optional property with default value
var data :AnyObject? //Its an optional property, it has nil value by default

init() {

//initalize all the properties of MyViewController here, before calling super class designated initalizer

super.init(nibName: "MyViewController", bundle: nil)//Designated initializer, pass nil, for both params if not using NIB

//Now you have access to self
self.loadData(data: nil)

}



//This method needs to be implemented as UIViewController conform to NSCoding protocol
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}

func loadData(data :AnyObject?) {
//Your own implementation
}

func addMoreData(data :AnyObject?) {
//Your own implementation
}

}

用法:

let myViewController = MyViewController()
myViewController.addMoreData(data: nil) //pass your data here

阅读代码片段中的评论,希望这能回答您的问题!

关于ios - 在 Swift 3 中覆盖 UIViewController init,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43982205/

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