I had a trick to help test UIAlertController that worked in Swift 2.x:
extension UIAlertController {
    typealias AlertHandler = @convention(block) (UIAlertAction) -> Void
    func tapButtonAtIndex(index: Int) {
        let block = actions[index].valueForKey("handler")
        let handler = unsafeBitCast(block, AlertHandler.self)
        handler(actions[index])
    }
}
This fails under Swift 3.x with fatal error: can't unsafeBitCast between types of different sizes, which tempts me to believe there might be a way to make the cast work. Can anyone figure it out?