加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

swift初始化函数失败

发布时间:2020-12-14 07:09:24 所属栏目:百科 来源:网络整理
导读:1、编译器提示出错: 'required' initializer 'init(coder:)' must be provided by subclass of 'UIViewController' 2、原因分析 1,在 Swift 中,类的初始化器有两种,分别是Designated Initializer(指定初始化器)和Convenience Initializer(便利初始化器

1、编译器提示出错:

'required' initializer 'init(coder:)' must be provided by subclass of 'UIViewController'

2、原因分析

1,在 Swift 中,类的初始化器有两种,分别是Designated Initializer(指定初始化器)和Convenience Initializer(便利初始化器)
2,如果子类没有定义任何的指定初始化器,那么会默认继承所有来自父类的指定初始化器。
3,如果子类提供了所有父类指定初始化器的实现,那么自动继承父类的便利初始化器
4,如果子类只实现部分父类初始化器,那么父类其他的指定初始化器和便利初始化器都不会继承。
5,子类的指定初始化器必须要调用父类合适的指定初始化器。

3、错误分析

A、第一个错误因为init(coder aDecoder: NSCoder) 方法是来自父类的指定构造器,因为这个构造器是 required,必须要实现. 但是因为我们已经重载了 init(),定义了一个指定构造器,所以这个方法不会被继承,要手动覆写。
B、第二个错是因为指定构造器必须调用它最近父类的指定构造器。


4、示例

报错源码

/*
实现切换的画面
*/

import UIKit

class ColorViewController:UIViewController
{
    var number:Int!;
    
    let colorMap = [
        1:UIColor.greenColor(),2:UIColor.blueColor(),3:UIColor.purpleColor() ];
    
    
    /// 初始化函数  ========!!!!! 这个函数要报错 
    init(initNumber:Int)
    {
        self.number = initNumber;
        super.init(nibName: nil,bundle: nil);
    }
    
    override func viewDidLoad() {
        ///super.viewDidLoad();
        
        /// 实例化label对象
        let numberLabel = UILabel(frame: CGRectMake(0,30,20));
        
        numberLabel.center = self.view.center;
        
        /// 设置显示内容
        numberLabel.text = "第(number)页";
        
        ///文字自动调整显示宽度
        numberLabel.adjustsFontSizeToFitWidth = true;
        
        /// 设置背景色
        numberLabel.backgroundColor = UIColor.whiteColor();
        
        self.view.addSubview(numberLabel);
        self.view.backgroundColor = colorMap[number];
    }
    
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }
}
修改后源码
/*
实现切换的画面
*/

import UIKit

class ColorViewController:UIViewController
{
    var number:Int!;
    
    let colorMap = [
        1:UIColor.greenColor(),3:UIColor.purpleColor() ];
    
    
    /// 初始化函数
    init(initNumber:Int)
    {
        self.number = initNumber;
        super.init(nibName: nil,bundle: nil);
    }
    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented");
    }
    
    override func viewDidLoad() {
        ///super.viewDidLoad();
        
        /// 实例化label对象
        let numberLabel = UILabel(frame: CGRectMake(0,20));
        
        numberLabel.center = self.view.center;
        
        /// 设置显示内容
        numberLabel.text = "第(number)页";
        
        ///文字自动调整显示宽度
        numberLabel.adjustsFontSizeToFitWidth = true;
        
        /// 设置背景色
        numberLabel.backgroundColor = UIColor.whiteColor();
        
        self.view.addSubview(numberLabel);
        self.view.backgroundColor = colorMap[number];
    }
    
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读