required 引发的小小思考

Posted Jenaral

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了required 引发的小小思考相关的知识,希望对你有一定的参考价值。

原创:转载请注明出处

 

 

首先,因为遇到问题如下:

class MainTabBar: UITabBar {

    override init(frame: CGRect) {

        super.init(frame: frame)

        self.translucent = false

        self.backgroundImage = UIImage(named: "tabbar")

    }

//    //在子类重写父类的必要构造器时,必须在子类的构造器前也添加required修饰符,表明该构造器要求也应用于继承链后面的子类。

    required init?(coder aDecoder: NSCoder) {

        super.init(coder: aDecoder)

 

    }

}

 

继承关系链:

UITabBar -> UIView -> 

public class UIView : UIResponder, NSCoding, UIAppearance, UIAppearanceContainer, UIDynamicItem, UITraitEnvironment, UICoordinateSpace, UIFocusEnvironment 

 

好,在UITabBar、UIView 中init方法并没有显示写出  Required

 

原因在此:

 

If you override any of a class‘s designated initializers, you don‘t inherit any other designated initializers. But UIView adopts the NSCoding protocol, which requires an init(coder:)initializer. So you must implement that one too:

required init(coder decoder: NSCoder) {
    super.init(coder: decoder)
}

 

 

By the way: Xcode 会提示自动补全代码  

 

 

参考链接:

1.http://stackoverflow.com/questions/26081287/required-initializer-initcoder-must-be-provided-by-subclass-of-uitablevi

2.https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Initialization.html#//apple_ref/doc/uid/TP40014097-CH18-XID_307

以上是关于required 引发的小小思考的主要内容,如果未能解决你的问题,请参考以下文章

表单提交后分页页面标签POST实现 —— 一个小小的bug引发的思考

0603对学术诚信和职业道德的思考

为啥代码片段在 matplotlib 2.0.2 上运行良好,但在 matplotlib 2.1.0 上引发错误

代码引发的简短思考?

对Sketch的一些新思考。

一颗小小的退耦电容,引发的纠结!