//
//  Notification.swift
//  MusicPlayer
//
//  Created by Mr.Zhou on 2024/4/1.
//

import Foundation
///通知关键词协议
protocol NotificationKey {
    associatedtype Keys: RawRepresentable
}
///将RawValue转化为字符串
extension NotificationKey where Keys.RawValue == String {
    ///发通知
    static func post(notificationName key:Keys, object:Any? = nil) {
        let rawValue = key.rawValue
        NotificationCenter.default.post(name: NSNotification.Name(rawValue), object: object)
    }
    ///监听通知
    static func add(observer: AnyObject, selector: Selector, notificationName key: Keys, object:Any? = nil) {
        let rawValue = key.rawValue
        NotificationCenter.default.addObserver(observer, selector: selector, name: NSNotification.Name(rawValue), object: object)
    }
    ///移除通知
    static func remove(observer: AnyObject, notificationName key: Keys, object:Any? = nil) {
        let rawValue = key.rawValue
        NotificationCenter.default.removeObserver(observer, name: NSNotification.Name(rawValue), object: object)
    }
}
//MARK: - 扩写通知
extension NotificationCenter{
    struct notificationKey:NotificationKey {
        ///关键词
        enum Keys:String {
            ///切换taBarItem
            case switch_tabBarItem
            ///倒计时过程（携带时间值）
            case time_times
            ///音量值改变
            case volume_change
            ///启动音乐播放器
            case play_music
            ///终止音乐播放器与倒计时
            case stop_music
            ///暂停音乐播放器
            case pause_music
            ///继续音乐播放器
            case resume_music
            ///开启麦克风监听
            case open_monitor
            ///关闭麦克风监听
            case stop_monitor
            ///新增音乐选择页
            case new_choice
            ///音乐创建成功
            case creat_music
            ///音乐实体为空
            case null_music
            ///收起音乐展示框
            case close_show
            ///显示音乐展示框
            case display_show
            ///隐藏音乐展示框
            case hidden_show
            ///音乐实体重命名
            case rename_music
        }
    }
}
