 	}
 	
 	/// The action to execute when the user selects a cell.
-	public var selectionAction: SelectionClosure!
+	public var selectionAction: SelectionClosure?
 	
 	/// The action to execute when the user cancels/hides the drop down.
 	public var cancelAction: Closure?

	the `anchorView` and the `selectionAction`
	at least before calling `show()`.
	*/
	convenience init() {
		self.init(frame: CGRectZero)
	}
	
	/**
	Creates a new instance of a drop down.
	
	:param: dataSource        The data source for the drop down.
	:param: anchorView        The view to which the drop down will displayed onto.
	:param: offset            The offset point relative to `anchorView`.
	:param: cellConfiguration The format for the cells' text.
	:param: selectionAction   The action to execute when the user selects a cell.
	:param: cancelAction      The action to execute when the user cancels/hides the drop down.
	
	:returns: A new instance of a drop down customized with the above parameters.
	*/
	convenience init(dataSource: [String], anchorView: UIView? = nil, topOffset: CGPoint? = nil, bottomOffset: CGPoint? = nil, cellConfiguration: ConfigurationClosure? = nil, selectionAction: SelectionClosure, cancelAction: Closure? = nil) {
		self.init()
		
		if let anchorView = anchorView {
			self.anchorView = anchorView
		}
		
		self.dataSource = dataSource
		self.topOffset = topOffset ?? CGPointZero
		self.bottomOffset = bottomOffset ?? CGPointZero
		self.selectionAction = selectionAction
		self.cellConfiguration = cellConfiguration
		self.cancelAction = cancelAction
	}
	
	override init(frame: CGRect) {
		super.init(frame: frame)
		setup()
	}
	
	required public init(coder aDecoder: NSCoder) {
		super.init(coder: aDecoder)
		setup()
	}

	
	public func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
		selectedRowIndex = indexPath.row
		selectionAction?(selectedRowIndex, dataSource[selectedRowIndex])
		hide()
	}
	
