2016-03-05 46 views
0

我有一个UIView子类仅包含以下内容:创建UIView子类没有Init() - Swift?

drawRect(rect: CGRect) { 
    let ctx: CGContext? = UIGraphicsGetCurrentContext() 
    let radius: CGFloat = rect.width/2 
    let endAngle = CGFloat(2 * M_PI) 
    CGContextAddArc(ctx, bounds.width/2, bounds.height/2, radius, 0, endAngle, 1) 
    CGContextSetStrokeColorWithColor(ctx, UIColor.blackColor().CGColor) 
    CGContextSetFillColorWithColor(ctx, UIColor.whiteColor().CGColor) 
    CGContextSetLineWidth(ctx, 4.0) 
    CGContextDrawPath(ctx, CGPathDrawingMode.FillStroke) 
} 

我不叫任何的init()函数,但对象仍然绘制。

此外,当我尝试实现init()函数时,我给出了有关所需初始化的几个错误。

所以我的问题是:我如何能够创建一个没有init()函数的UIView对象?

回答

2

初始化器是继承的。你的超类(UIView)已经定义了init,所以你的类默认继承它们。

一旦你定义了init,你的类将不会继承超类初始化器,所以你将不得不定义所有需要的类。

+0

只是澄清:如果我定义什么是必需的,并调用super.init()我可以重写init()函数? –

+0

@BrandonBradley是的,你可以。然而,对于'UIView'来说,覆盖作为指定初始值设定项的'init(frame:)'更为常见。 – Sulthan

+0

好的,谢谢你的信息。对此还是比较新的。 –