mirror of
https://github.com/samsonjs/NotificationTask.git
synced 2026-03-26 09:25:50 +00:00
Add Hashable conformance
This commit is contained in:
parent
c089cd253c
commit
638c5942c0
1 changed files with 19 additions and 4 deletions
|
|
@ -14,8 +14,8 @@ extension Notification: @unchecked @retroactive Sendable {}
|
||||||
/// always receives a strong reference. This one is called ``init(name:context:center:performing:)``.
|
/// always receives a strong reference. This one is called ``init(name:context:center:performing:)``.
|
||||||
///
|
///
|
||||||
/// ``NotificationTask`` is bound to the main actor and is intended to be used in your view layer. This keeps it simple
|
/// ``NotificationTask`` is bound to the main actor and is intended to be used in your view layer. This keeps it simple
|
||||||
@MainActor public final class NotificationTask {
|
@MainActor public final class NotificationTask: Hashable {
|
||||||
var task: Task<Void, Never>?
|
let task: Task<Void, Never>
|
||||||
|
|
||||||
init(task: Task<Void, Never>) {
|
init(task: Task<Void, Never>) {
|
||||||
self.task = task
|
self.task = task
|
||||||
|
|
@ -49,7 +49,22 @@ extension Notification: @unchecked @retroactive Sendable {}
|
||||||
}
|
}
|
||||||
|
|
||||||
deinit {
|
deinit {
|
||||||
task?.cancel()
|
task.cancel()
|
||||||
task = nil
|
}
|
||||||
|
|
||||||
|
public func store(in set: inout Set<NotificationTask>) {
|
||||||
|
set.insert(self)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// MARK: - Hashable conformance
|
||||||
|
|
||||||
|
public extension NotificationTask {
|
||||||
|
nonisolated static func == (lhs: NotificationTask, rhs: NotificationTask) -> Bool {
|
||||||
|
ObjectIdentifier(lhs) == ObjectIdentifier(rhs)
|
||||||
|
}
|
||||||
|
|
||||||
|
nonisolated func hash(into hasher: inout Hasher) {
|
||||||
|
hasher.combine(task)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue