方便初始化程序必须使用self.init错误委托自定义UIView初始化程序

时间:2017-03-02 06:15:40

标签: ios swift uiview

我正在尝试为UIView创建自定义init方法。代码如下:

convenience init(frame: CGRect, tutorProfileImageURL: String?) {
        self.tutorProfileImageURL = tutorProfileImageURL
        super.init(frame: frame)
    }

    override init(frame: CGRect) {
        super.init(frame: frame)
        setup()
    }

    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
        setup()
    }

    func setup() {
        _ = Bundle.main.loadNibNamed("TutorArrivedAlertView", owner: self, options: nil)?[0] as! UIView
        self.addSubview(customView)
        customView.frame = self.bounds
        tutorImageView.layer.cornerRadius = tutorImageView.frame.size.height/2
        tutorImageView.clipsToBounds = true
    }

但是我收到了错误:

  

方便初始值设定项必须使用self.init进行委托,而不是使用super.init链接到超类初始化程序

2 个答案:

答案 0 :(得分:5)

此错误表明,我们不应将便捷初始化器与其超类初始化器链接起来。

我们需要调用以下方法

  

super.init(frame:frame)

在这个方法里面

  

覆盖init(frame:CGRect)

这就是它的样子:

convenience init(frame: CGRect, tutorProfileImageURL: String?) {
    self.init(frame: frame)
    self.tutorProfileImageURL = tutorProfileImageURL
}

override init(frame: CGRect) {
    super.init(frame: frame)
    setup()
}

Check difference between Convenience and Designation initializers

答案 1 :(得分:0)

便利初始化程序使用他的init。所以只需将最后一行更改为self.init

convenience init(frame: CGRect, tutorProfileImageURL: String?) {
        self.init(frame: frame)
        self.tutorProfileImageURL = tutorProfileImageURL
    }