美文网首页
swift UIViewController...重写初始化

swift UIViewController...重写初始化

作者: DL是谁 | 来源:发表于2017-11-06 15:17 被阅读696次

自定义init初始化构造函数实现参数传递

对于UIKit框架类,不能像下面一样简单的重写:

```

import UIKit

class WebViewController:UIViewController{

var imageUrl:String!

init(imageUrl:String) {

self.imageUrl= imageUrl

}

```

required init?(coder aDecoder:NSCoder) {

fatalError("init(coder:) has not been implemented")

}

override funcviewDidLoad() {

super.viewDidLoad()

self.view.backgroundColor=UIColor.whiteColor()

}

这样编译器会报如下错误:

Super.initisn‘t called before returning from initializer

原因分析:

1,在Swift中,类的初始化器有两种,分别是Designated Initializer(指定初始化器)和Convenience Initializer(便利初始化器)

2,如果子类没有定义任何的指定初始化器,那么会默认继承所有来自父类的指定初始化器。

3,如果子类提供了所有父类指定初始化器的实现,那么自动继承父类的便利初始化器

4,如果子类只实现部分父类初始化器,那么父类其他的指定初始化器和便利初始化器都不会继承。

5,子类的指定初始化器必须要调用父类合适的指定初始化器。

错误分析:指定构造器必须调用它最近父类的指定构造器。

正确的写法:

import UIKit

class WebViewController:UIViewController{

var imageUrl:String!

init(imageUrl:String) {

super.init(nibName:nil, bundle:nil)

self.imageUrl= imageUrl

}

required init?(coder aDecoder:NSCoder) {

fatalError("init(coder:) has not been implemented")

}

override funcviewDidLoad() {

super.viewDidLoad()

self.view.backgroundColor=UIColor.whiteColor()

}

相关文章

网友评论

      本文标题:swift UIViewController...重写初始化

      本文链接:https://www.haomeiwen.com/subject/iaelmxtx.html