2016-03-05 81 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

好的,謝謝你的信息。對此還是比較新的。 –