iOS开发之首页弹框管理

  做app开发的时候,尤其是对于强运行的产品,在app首页可能会有各种各样的弹框,而且这些弹框种类不同,弹出顺序不同,优先级不同。如果单单是根据if else来判断估计要累死。根据自己的业务需求,我这边做了一个弹框管理类。主要实现功能如下:
1,实现弹框的按顺序显示
2,实现弹框根据优先级显示
3,减少弹框显示的逻辑处理。
具体代码如下:

//
//  JKAlertManager.swift
//  JKAlertManager
//
//  Created by JackLee on 2019/7/15.
//

import Foundation

@objcMembers class JKAlertConfig: NSObject {
    /// this is the type of alert
    public var alertType:NSInteger = 0
    /// the show priority of the alert
    public var priority:NSInteger = 0
    /// the params of the alert about the content
    public var params:NSDictionary = [:]
}

typealias JKAlertConfigBlock = (_ alert:JKAlertConfig) ->Void


@objcMembers class JKAlertsManager: NSObject {
    static let shareInstance = JKAlertsManager()
    
    public var currentAlertConfigBlock:JKAlertConfigBlock?
    
    private var hasShowedAlert:Bool = false
    
    private lazy var lock:NSLock = {
        let tmpLock:NSLock = NSLock.init()
        return tmpLock
    }()
    
    private lazy var alerts:Array<JKAlertConfig> = {
        let tmpAlerts:[JKAlertConfig] = []
        return tmpAlerts
    }()
    
    public class func addAlert(alert:JKAlertConfig) -> Void{
      JKAlertsManager.shareInstance.lock.lock()
        JKAlertsManager.shareInstance.alerts.append(alert)
        JKAlertsManager.shareInstance.alerts.sort(by: { (_ alert1:JKAlertConfig, _ alert2:JKAlertConfig) -> Bool in
            return alert1.priority > alert2.priority
        })
      JKAlertsManager.shareInstance.lock.unlock()
    }
    
    public class func removeAlert() -> Void{
        JKAlertsManager.shareInstance.lock.lock()
        if JKAlertsManager.shareInstance.alerts.count > 0 {
          JKAlertsManager.shareInstance.alerts.removeFirst()
          JKAlertsManager.shareInstance.hasShowedAlert = false
        }
        JKAlertsManager.shareInstance.lock.unlock()
    }
    
    public class func removeAllAlerts() -> Void{
        JKAlertsManager.shareInstance.lock.lock()
        JKAlertsManager.shareInstance.alerts.removeAll()
        JKAlertsManager.shareInstance.hasShowedAlert = false
        JKAlertsManager.shareInstance.lock.unlock()
    }
    
    public class func alertCount() -> NSInteger{
        return JKAlertsManager.shareInstance.alerts.count;
    }
    
    public class func firstAlertConfig() -> JKAlertConfig?{
        return JKAlertsManager.shareInstance.alerts.first
    }
    
    public class func showAlert() -> Void{
        if JKAlertsManager.shareInstance.hasShowedAlert == false {
            let alertConfig:JKAlertConfig? = JKAlertsManager.firstAlertConfig()
            if alertConfig != nil {
                if let currentAlertConfigBlock = JKAlertsManager.shareInstance.currentAlertConfigBlock{
                    currentAlertConfigBlock(alertConfig!)
                }
            
            }
          
        }
    }
}

大家如果在使用过程中遇到问题,可以留言或者私信哦,
源码地址:https://github.com/xindizhiyin2014/JKAlertsManager
pod集成:pod ‘JKAlertsManager’
更多优质文章,可以微信扫码关注:
这里写图片描述

发布了231 篇原创文章 · 获赞 110 · 访问量 60万+

猜你喜欢

转载自blog.csdn.net/HHL110120/article/details/96186614