Skip to content

Instantly share code, notes, and snippets.

@Nexengineer
Created January 16, 2018 10:18
Show Gist options
  • Save Nexengineer/f83f112a82240546d3c454368664fe98 to your computer and use it in GitHub Desktop.
Save Nexengineer/f83f112a82240546d3c454368664fe98 to your computer and use it in GitHub Desktop.
EKEVENT Handler class
//
// DataHandler.swift
// NMEventKitDemo
//
// Created by Neeraj Kumar Mishra on 1/15/18.
// Copyright © 2018 Neeraj Kumar Mishra. All rights reserved.
//
import UIKit
import EventKit
class DataHandler: NSObject {
class func getFormat() -> String{
//"dd-MM-yyyy hh:mm a"
return "MM/dd/yyyy"
}
// This method is for creating a event
class func getAllEvents(_ startDate: Date = Date(), _ endDate: Date = Date(timeIntervalSinceNow: Date.distantFuture.timeIntervalSinceReferenceDate) ) -> [DataModel] {
var arrEvents = [DataModel]()
let eventStore = EKEventStore()
let calendars = eventStore.calendars(for: .event)
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = DataHandler.getFormat()
for calendar in calendars {
if calendar.type == .local {
let fetchCalendarEvents: NSPredicate? = eventStore.predicateForEvents(withStart: startDate, end: endDate, calendars:[calendar])
let eventList = eventStore.events(matching: fetchCalendarEvents ?? NSPredicate())
for event in eventList {
let objTemp = DataModel(event.title, dateFormatter.string(from:event.startDate), dateFormatter.string(from:event.endDate), event.eventIdentifier)
arrEvents.append(objTemp)
}
}
}
return arrEvents
}
// This method is for adding a new event
class func addEvent(_ dataToSave: DataModel) -> Bool {
// Formatting Date
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = DataHandler.getFormat()
let dateStart = dateFormatter.date(from: (dataToSave.startDate))
let dateEnd = dateFormatter.date(from: (dataToSave.endDate))
// Creating Events
let eventStore = EKEventStore()
let event:EKEvent = EKEvent(eventStore: eventStore)
event.title = dataToSave.title
event.startDate = dateStart
event.endDate = dateEnd
event.notes = "Created By User "
event.calendar = eventStore.defaultCalendarForNewEvents
do {
try eventStore.save(event, span: .thisEvent)
print("events added with dates:")
return true
} catch let e as NSError {
print(e.description)
return false
}
}
class func updateEvent(eventID: String, dataModel: DataModel) -> Bool {
let eventStore = EKEventStore()
let event = eventStore.event(withIdentifier: eventID)
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = DataHandler.getFormat()
let dateStart = dateFormatter.date(from: (dataModel.startDate))
let dateEnd = dateFormatter.date(from: (dataModel.endDate))
if event == nil {
print("No event with this name ")
return false
} else {
event?.title = dataModel.title
event?.startDate = dateStart
event?.endDate = dateEnd
event?.notes = "Created By User "
event?.calendar = eventStore.defaultCalendarForNewEvents
do {
try eventStore.save(event!, span: .thisEvent)
print("events added with dates:")
return true
} catch let e as NSError {
print(e.description)
return false
}
}
}
// This method is for removing event
class func removeEvent (eventID: String) -> Bool {
let eventStore = EKEventStore()
let event = eventStore.event(withIdentifier: eventID)
if event == nil {
print("No event with this name ")
return false
} else {
do {
try eventStore.remove(event!, span: .thisEvent)
return true
} catch let e as NSError {
print(e.description)
return false
}
}
}
}
// Data Model To be used
class DataModel {
var title:String
var startDate: String
var endDate: String
var eventIdentifier: String
init(_ title: String, _ startDate: String, _ endDate: String, _ eventIdentifier: String) {
self.title = title == "" ? "No Title Found" : title
self.startDate = startDate
self.endDate = endDate
self.eventIdentifier = eventIdentifier
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment