前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Swift 日历添加事件 删除事件

Swift 日历添加事件 删除事件

作者头像
菜菜不吃蔡
发布2021-03-20 14:10:50
4K1
发布2021-03-20 14:10:50
举报
文章被收录于专栏:编程语言编程语言
代码语言:javascript
复制
import EventKit
/**
 Privacy - Calendars Usage Description 添加日历权限 info.list 配置权限
 */
/// 日历添加事件
class KKAddEventClasse: NSObject {
    /// 添加成功回调
    typealias SuccessAddEvent = ((_ identifier: String) -> Void)
    /// 添加失败回调
    typealias ErrorAddEvent = ((_ error: String) -> Void)
    
    
    // 提前一个小时开始
    var eventStartDate:Double = 3600
    // 提前一分钟结束开始
    var eventEndDate:Double = 60
    
    /// 是否添加闹钟 默认添加
    var isAddAlarm:Bool = true
    /// 添加闹钟(开始前多少秒)若为正则是开始后多少秒。
    var addAlarmDate:Double = 60
    
    /// 事件商店
    private  var eventStore = EKEventStore()
   
    
    /// 添加事件
    /// - Parameter time: "yyyy-MM-dd HH:mm:ss"
    open func addEventByTime(time:String,successAddEvent:SuccessAddEvent? = nil,errorAddEvent:ErrorAddEvent? = nil) {
        if time.count != "yyyy-MM-dd HH:mm:ss".count {
            return
        }
        eventStore.requestAccess(to: EKEntityType.event, completion: { [weak self](isAllow, error) in
            if error != nil {
                errorAddEvent?("添加异常")
                return
            }
            if isAllow == true {
                self?.addEvent(time:time,successAddEvent:successAddEvent,errorAddEvent:errorAddEvent)
                print("允许添加")
            } else {
                errorAddEvent?("未允许添加")
            }
            
        })
        
    }
    /// 移除事件 通过事件id
    /// - Parameter eventIdentifier: 事件唯一标识
    open func removeEnvent(_ eventIdentifier:String){
        let event =  eventStore.event(withIdentifier: eventIdentifier)
        guard event != nil else {
              return
        }
        /// 事件存在
        do {
            let _ = try eventStore.remove(event!, span: .thisEvent)
            
            } catch {
            print(error)
        }
    }
    
    private func addEvent(time:String,successAddEvent:SuccessAddEvent? = nil,errorAddEvent:ErrorAddEvent? = nil) {
        let event = EKEvent.init(eventStore: eventStore)
        /// 事件标题
        event.title = "事件标题"
        event.calendar = eventStore.defaultCalendarForNewEvents
        /// 日历显示标题
        event.calendar.title = "日历显示标题"
        
        let formatter = DateFormatter()
        formatter.dateFormat = "yyyy-MM-dd HH:mm:ss"
        let date:Date = formatter.date(from: time) ?? Date()
                       
        // 提前一个小时开始
        event.startDate = date - eventStartDate
        /// 提前一分钟结束
        event.endDate = date - eventEndDate
        if isAddAlarm {
            /// 添加闹钟结合(开始前多少秒)若为正则是开始后多少秒。
            event.addAlarm(EKAlarm(relativeOffset: -60))
        }
        do {

            try eventStore.save(event, span: .thisEvent, commit: true)
            DispatchQueue.main.async {
                successAddEvent?(event.eventIdentifier)
            }

        } catch  {
            errorAddEvent?("添加异常")
        }
    }
   
}

使用:

代码语言:javascript
复制
 let event = KKAddEventClasse()
/// 添加
 event.addEventByTime(time: "2021-03-01 16:00:00",successAddEvent: { [weak self](eventIdentifier) in
            self?.eventIdentifier = eventIdentifier
        }, errorAddEvent:  {(error) in
            print(error)
        })
/// 删除
event.removeEnvent(eventIdentifier)
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2021-03-01 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档