如何在初始化时发送参数UIView

问题描述:

以前曾询问过它,但没有一致的简单答案。如何在初始化时发送参数UIView

通常你:

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

需要做(我不能因为没有这样的功能覆盖):

override init (frame : CGRect, number:Int) 
{ 
    super.init(frame : frame) 

这显然给了一些错误。 有没有办法像一样通过创建实例并仍然传递参数?

+1

阅读错误消息:你*不重写任何方法从它的超类*,这意味着在超类没有初始化'init(frame:number:)'。把'override'替换为'convenience'。 – vadian

+0

这将产生更多的错误,你可以发布请直接回答? – Curnelious

为了完成你必须写

class MyView : UIView { 

    var number : Int 

    override convenience init(frame: CGRect) 
    { 
     self.init(frame:frame, number: 0) 
    } 

    init(frame: CGRect, number: Int) 
    { 
     self.number = number 
     super.init(frame: frame) 
    } 

    required init?(coder aDecoder: NSCoder) { 
     number = 0 
     super.init(coder : aDecoder) 
    } 
} 

可能更容易初始化所有规则和要求查看通常/指定的方式并将该属性设置为额外的行。

有一个为你指定的任何覆盖方法,只是把它写这样

init(frame : CGRect, number: Int) { 
    super.init(frame : frame) 
} 
+0

而不是原来的重写?你像往常一样初始化它? – Curnelious

+1

如果按照我在这里描述的方式进行操作,您将创建一个自定义初始化程序,但您需要在自定义初始化程序中调用'super.init(frame:)',以便您可以传递该帧你的自定义初始化为超级。 –

+0

这就是我已经知道:)我正在寻找一种方法来做到这一点,当我像往常一样启动班级。我弄错你了吗? – Curnelious