做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’
更多优质文章,可以微信扫码关注: