swift UIViewController...重写初始化

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

}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 官方文档 初始化 Initialization是为准备使用类,结构体或者枚举实例的一个过程。这个过程涉及了在实例里...
    hrscy阅读 1,148评论 0 1
  • 初始化 (Initialization) 自从苹果2014年发布Swift,到现在已经两年多了,而Swift也来到...
    Lebron_James阅读 1,222评论 0 0
  • 原文地址:http://huizhao.win/2016/11/13/swift-init/ 从 Objectiv...
    赵大老板阅读 34,543评论 11 121
  • 初始化(Initialization) 初始化是类、结构体、枚举类型的准备过程。这个过程涉及到所有存储属性的初始化...
    泗哥阅读 5,653评论 0 3
  • 倚栏望断几辛苦。把酒临风,只待伊人顾。红却莹枫滴玉露。落日孤灯珠帘幕。 雨罢风清星无数。拂云堆远,易到伤心处。萧萧...
    落墨留香阅读 461评论 0 3