在子类swift中设置初始化程序(init)

时间:2017-05-25 20:51:02

标签: ios swift init initializer

我试图了解如何从另一个类调用例如let creation = menuButtonController(image:#imageLiteral(resourceName: "maps")),然后在menuButtonController我设置了这个:

class menuButtonController: UIView {

    let buttonView = UIView()
    let button = UIButton(type: .custom)
    var imageButton: UIImageView


    init(frame: CGRect, image: UIImage) {
        super.init(frame: frame,image: image) //Cannot invoke  UIView.init with an argument list of type (frame cgrect, image uiimage)
        self.imageButton.image = image
    }

    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
    /* other functions */
}

它给了我一个我无法解决的错误。任何人都可以帮助我吗?

修改

现在,如果我只想使用(image: UIImage)调用初始值设定项,那么我应该使用这样的convenience init吗?

convenience init(image: UIImage) {
    self.init(image: image)
    self.imageButton.image = image
}

它不会给我错误,但在我尝试运行应用程序时会崩溃

1 个答案:

答案 0 :(得分:1)

超类init(frame: CGRect, image: UIImage)中没有方法UIView。您需要先初始化imageButton并调用指定的初始值设定项init(frame

init(frame: CGRect, image: UIImage) {
    self.imageButton.image = image
    super.init(frame: frame)
}

顺便说一句:类名应该以大写字母开头。