部分需求修改

This commit is contained in:
DDIsFriend
2023-10-24 10:09:59 +08:00
parent 529d44d51d
commit c11aab7e05
45 changed files with 8039 additions and 8542 deletions

View File

@@ -12,10 +12,8 @@ open class GCDTimer {
public static let `default` = GCDTimer()
private var timerSources : [GCDTimerAbstract] = []
private var canceledCompletionHandler:(() -> Void)? //
private var removeQueue = DispatchQueue(label: "GCDTimerRemoveQueue") // timerSourcesGCDTimerAbstract
private var timerAddOrRemoveQueue = DispatchQueue(label: "GCDTimerAddOrRemoveQueue") // timerSourcesGCDTimerAbstract
///
/// - Parameters:
@@ -27,63 +25,92 @@ open class GCDTimer {
/// - cancelHandler: cancelHandlercompletionHandler
/// - completionHandler: completionHandlercancelHandler
public func addGCDTimer(named timerName:String,delay:DispatchTimeInterval,repeating:DispatchTimeInterval,repeatCount:Int = Int.max,repeatHandler:@escaping (() -> Void),cancelHandler:(() -> Void)? = nil,completionHandler:(() -> Void)? = nil) {
if let _ = timerSources.first(where: { gcdTimerA in
gcdTimerA.timerName == timerName
}) {
DDLog(message: "定时器\'\(timerName)\'重复添加,添加失败")
return
}
let gcdTimerA = GCDTimerAbstract(named: timerName)
gcdTimerA.addGCDTimer(delay: delay, repeating: repeating, repeatCount: repeatCount) {
repeatHandler()
} cancelHandler: {[weak self] timerName in
//
self?.removeGCDTimer(named: timerName,removeComletionHandler: {[weak self] in
//
if let cancelHandler {
cancelHandler()
}
//
if let canceledCompletionHandler = self?.canceledCompletionHandler {
canceledCompletionHandler()
}
})
} completionHandler: {[weak self] timerName in
//
self?.removeGCDTimer(named: timerName,removeComletionHandler: {
//
if let completionHandler {
completionHandler()
}
})
}
timerAddOrRemoveQueue.async { [weak self] in
if let _ = self?.timerSources.first(where: { gcdTimerA in
gcdTimerA.timerName == timerName
}) {
DDLog(message: "定时器\'\(timerName)\'重复添加,添加失败")
return
}
let gcdTimerA = GCDTimerAbstract(named: timerName)
gcdTimerA.addGCDTimer(delay: delay, repeating: repeating, repeatCount: repeatCount) {
repeatHandler()
} cancelHandler: {[weak self] (timerName,canceledCompletionHandler) in
//
self?.removeGCDTimer(named: timerName,removeComletionHandler: {
//
if let cancelHandler {
cancelHandler()
}
//
if let canceledCompletionHandler {
canceledCompletionHandler()
}
})
} completionHandler: {[weak self] (timerName,canceledCompletionHandler) in
//
self?.removeGCDTimer(named: timerName,removeComletionHandler: {
//
if let completionHandler {
completionHandler()
}
//
if let canceledCompletionHandler {
canceledCompletionHandler()
}
})
}
timerSources.append(gcdTimerA)
DDLog(message: "定时器\'\(timerName)\'添加成功")
//
logTimerName()
self?.timerSources.append(gcdTimerA)
DDLog(message: "定时器\'\(timerName)\'添加成功")
//
self?.logTimerName()
}
}
func removeGCDTimer(named timerName:String,removeComletionHandler:@escaping () -> Void) {
timerAddOrRemoveQueue.async { [weak self] in
//
if let index = self?.timerSources.firstIndex(where: { gcdTimerA in
gcdTimerA.timerName == timerName
}) {
self?.timerSources.remove(at: index)
DDLog(message: "定时器\'\(timerName)\'移除成功")
//
DispatchQueue.global().async {
removeComletionHandler()
}
}
//
self?.logTimerName()
}
}
/// canceledCompletionHandlercanceledCompletionHandler
/// - Parameters:
/// - timerName:
/// - canceledCompletionHandler:
public func cancelGCDTimer(named timerName:String,canceledCompletionHandler:(() -> Void)? = nil) {
self.canceledCompletionHandler = canceledCompletionHandler
// timerSources
if let gcdTimerA = timerSources.first(where: { gcdTimerA in
gcdTimerA.timerName == timerName
}) {
gcdTimerA.cancelGCDTimer(isCanceledManually: true)
}else{
if let canceledCompletionHandler {
canceledCompletionHandler()
timerAddOrRemoveQueue.async {[weak self] in
// timerSources
if let gcdTimerA = self?.timerSources.first(where: { gcdTimerA in
gcdTimerA.timerName == timerName
}) {
gcdTimerA.canceledCompletionHandler = canceledCompletionHandler
gcdTimerA.cancelGCDTimer(isCanceledManually: true)
}else{
//
DispatchQueue.global().async {
if let canceledCompletionHandler {
canceledCompletionHandler()
}
}
//
self?.logTimerName()
}
//
logTimerName()
}
}
@@ -96,20 +123,6 @@ open class GCDTimer {
return false
}
func removeGCDTimer(named timerName:String,removeComletionHandler:@escaping () -> Void) {
removeQueue.sync {[weak self] in
//
if let index = self?.timerSources.firstIndex(where: { gcdTimerA in
gcdTimerA.timerName == timerName
}) {
self?.timerSources.remove(at: index)
DDLog(message: "定时器\'\(timerName)\'移除成功")
}
//
self?.logTimerName()
}
}
func logTimerName() {
var array : [String] = []
for gcdTimerA in timerSources {
@@ -128,11 +141,13 @@ class GCDTimerAbstract {
public var isCanceledManually : Bool = false //
public var canceledCompletionHandler:(() -> Void)? //
init(named timerName: String) {
self.timerName = timerName
}
public func addGCDTimer(delay:DispatchTimeInterval,repeating:DispatchTimeInterval,repeatCount:Int,repeatHandler:@escaping (() -> Void),cancelHandler:((String) -> Void)? = nil,completionHandler: ((String) -> Void)? = nil) {
public func addGCDTimer(delay:DispatchTimeInterval,repeating:DispatchTimeInterval,repeatCount:Int,repeatHandler:@escaping (() -> Void),cancelHandler:((String,(() -> Void)?) -> Void)? = nil,completionHandler: ((String,(() -> Void)?) -> Void)? = nil) {
//
var leftRepeatCount = repeatCount
@@ -143,6 +158,7 @@ class GCDTimerAbstract {
leftRepeatCount-=1
//
if (leftRepeatCount > 0) == false {
// cancelcanceledCompletionHandler
self?.cancelGCDTimer(isCanceledManually: false)
}
})
@@ -151,12 +167,12 @@ class GCDTimerAbstract {
if self?.isCanceledManually == true {
// ,
if let cancelHandler,let timerName = self?.timerName {
cancelHandler(timerName)
cancelHandler(timerName,self?.canceledCompletionHandler)
}
}else{
//
if let completionHandler,let timerName = self?.timerName {
completionHandler(timerName)
completionHandler(timerName,self?.canceledCompletionHandler)
}
}
})