Cómo sacar todos los eventos de un calendario (Swift)

Soy un poco nuevo en Swift, pero estoy realmente interesado. Me gustaría obtener todos los eventos que almacené en un calendario llamado "Trabajo" y mostrarlos en una vista de tabla. Estaba buscando preguntas como esta, pero el código que se muestra allí parece ser un poco viejo y realmente no funciona. ¿Cómo puedo hacer eso? TableView debería poder mostrar el Título, la fecha de inicio y finalización. ¿Es posible obtener como todos los títulos en una matriz de cadenas? ¿Lo mismo con el principio y el final? ¡Sería increíble obtener algunos consejos!

Actualización: Declaré las variables fuera de la clase. ¿Ahora probé un código que se parece a esto, gracias a una respuesta que recibí aquí, pero no consigo que las celdas muestren nada? Y sí, ya creé un testEvent en mi calendario de trabajo en el simulador.

    override func viewDidAppear(animated: Bool) {

    let eventStore = EKEventStore()

    switch EKEventStore.authorizationStatusForEntityType(.Event) {
    case .Authorized:
        readEvents()
    case .Denied:
        print("Access denied")
    case .NotDetermined:

        eventStore.requestAccessToEntityType(.Event, completion: { (granted: Bool, NSError) -> Void in
            if granted {
                self.readEvents()

            }else{
                print("Access denied")
            }



        })
    default:
        print("Case Default")
    }
    self.tableView.reloadData()
}



func readEvents() {



    let eventStore = EKEventStore()
    let calendars = eventStore.calendarsForEntityType(.Event)

    for calendar in calendars {
        if calendar.source.title == "Work" {
            let oneMonthAgo = NSDate(timeIntervalSinceNow: -30*24*3600)
            let oneMonthAfter = NSDate(timeIntervalSinceNow: +30*24*3600)


            let predicate = eventStore.predicateForEventsWithStartDate(oneMonthAgo, endDate: oneMonthAfter, calendars: [calendar])

            var events = eventStore.eventsMatchingPredicate(predicate)

            for event in events {

                titles.append(event.title)
                startDates.append(event.startDate)
                endDates.append(event.endDate)


            }

        }
    }


}

// MARK: - Table view data source



override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    // #warning Incomplete implementation, return the number of rows
    return titles.count
}


override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath)


    cell.textLabel!.text = titles[indexPath.row]
    cell.detailTextLabel!.text = "From: \(startDates[indexPath.row]) Until: \(endDates[indexPath.row])"
    // Configure the cell...

    return cell
}

Respuestas a la pregunta(3)

Su respuesta a la pregunta