swift UIViewController...重写初始化

2017-11-06  本文已影响696人  DL是谁

自定义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()

}

上一篇 下一篇

猜你喜欢

热点阅读