         commonInit()
     }
     
-    required init?(coder aDecoder: NSCoder!) {
+    required init?(coder aDecoder: NSCoder) {
         textStorage = NSTextStorage()
         multicolumnManager = NSLayoutManager()
         singleColumnManager = NSLayoutManager()

        // BUG: with different line break modes at range 0, the text manager seems to layout only the first line fragment
        // and then stop, investigate more, for now, force WordWrapping
        // paragraph.lineBreakMode = lineBreakMode
        paragraph.lineBreakMode = .ByWordWrapping
        let attributes = [
            NSFontAttributeName: font,
            NSForegroundColorAttributeName: textColor,
            NSShadowAttributeName: shadow,
            NSParagraphStyleAttributeName: paragraph
        ]
        var string = NSMutableAttributedString(string: text, attributes: attributes)
        // Copy existing attributes, we do it after because they may override the label default values
        attributedText.enumerateAttributesInRange(NSRange(location: 0, length: attributedText.length), options: []) { (attrs, range, stop) in
            string.addAttributes(attrs, range: range)
            if range.location == 0 {
                if var paragraph = attrs[NSParagraphStyleAttributeName] as? NSMutableParagraphStyle {
                    // Same as above
                    paragraph.lineBreakMode = .ByWordWrapping
                    string.addAttribute(NSParagraphStyleAttributeName, value: paragraph, range: range)
                }
            }
        }
        textStorage.setAttributedString(string)
        
        let columnWidth = (frame.width - CGFloat(max(0, Int(numberOfColumns) - 1)) * columnsSpacing) / CGFloat(numberOfColumns)
        
        let singlecolumnContainer = singleColumnManager.textContainers[0] as NSTextContainer
        singlecolumnContainer.size = CGSize(width: columnWidth, height: CGFloat.max)
        singleColumnManager.glyphRangeForTextContainer(singlecolumnContainer)

        var columnHeight: CGFloat = 0.0
        let proposedColumnHeight = ceil(singleColumnManager.usedRectForTextContainer(singlecolumnContainer).height / CGFloat(numberOfColumns))
        singleColumnManager.enumerateLineFragmentsForGlyphRange(NSRange(location: 0, length: textStorage.length)) { (rect, usedRect, textContainer, glyphRange, stop) in
            columnHeight += rect.height
            if columnHeight >= proposedColumnHeight {
                stop.initialize(true)
            }
        }

        while multicolumnManager.textContainers.count != Int(numberOfColumns) {
            if multicolumnManager.textContainers.count < Int(numberOfColumns) {
                let container = NSTextContainer(size: CGSize.zero)
                container.lineFragmentPadding = 0.0
                multicolumnManager.addTextContainer(container)
                multicolumnManager.glyphRangeForTextContainer(container)
            } else {
                multicolumnManager.removeTextContainerAtIndex(multicolumnManager.textContainers.count - 1)
            }
        }
     

    
    // MARK: - Drawing
    
    override func draw(_ rect: CGRect) {
        let columnWidth = (frame.width - CGFloat(max(0, UInt(numberOfColumns - 1))) * columnsSpacing) / CGFloat(numberOfColumns)
        for (index, container) in (multicolumnManager.textContainers as [NSTextContainer]).enumerated() {
            let containerOrigin = CGPoint(x: CGFloat(index) * (columnWidth + columnsSpacing), y: 0.0)
            let containerRange = multicolumnManager.glyphRange(for: container)
            multicolumnManager.drawBackground(forGlyphRange: containerRange, at: containerOrigin)
            multicolumnManager.drawGlyphs(forGlyphRange: containerRange, at: containerOrigin)
        }
    }
    
