From 734b14ff4ab8fb61fd2951a67a41b34fb6bc81e3 Mon Sep 17 00:00:00 2001 From: Muukii Date: Tue, 4 Nov 2025 15:20:26 +0900 Subject: [PATCH] Patch --- .../AsyncMultiplexImage/MultiplexImage.swift | 39 ++++++++++++++++--- 1 file changed, 33 insertions(+), 6 deletions(-) diff --git a/Sources/AsyncMultiplexImage/MultiplexImage.swift b/Sources/AsyncMultiplexImage/MultiplexImage.swift index 84d589f..e1c9a20 100644 --- a/Sources/AsyncMultiplexImage/MultiplexImage.swift +++ b/Sources/AsyncMultiplexImage/MultiplexImage.swift @@ -2,6 +2,12 @@ import Foundation public struct MultiplexImage: Hashable, Sendable { + public enum URLContainer: Sendable { + case single(URL) + case multiple([URL]) + case dynamic(@Sendable (borrowing Context) -> [URL]) + } + public struct Context: ~Copyable { public let targetSize: CGSize public let displayScale: CGFloat @@ -25,7 +31,12 @@ public struct MultiplexImage: Hashable, Sendable { public let identifier: String - private let _urlsProvider: @Sendable (borrowing Context) -> [URL] + private let urlContainer: URLContainer + + /** + User defined flag for any purpose. + */ + public var flag: UInt64 /** - Parameters: @@ -33,19 +44,34 @@ public struct MultiplexImage: Hashable, Sendable { - urlsProvider: The provider of the image URLs as the first item is the top priority. */ public init( + flag: UInt64 = 0, identifier: String, urlsProvider: @escaping @Sendable (borrowing Context) -> [URL] ) { + self.flag = flag self.identifier = identifier - self._urlsProvider = urlsProvider + self.urlContainer = .dynamic(urlsProvider) } - public init(identifier: String, urls: [URL]) { - self.init(identifier: identifier, urlsProvider: { _ in urls }) + public init( + flag: UInt64 = 0, + identifier: String, + urls: [URL] + ) { + self.flag = flag + self.identifier = identifier + self.urlContainer = .multiple(urls) } func makeURLs(context: borrowing Context) -> [URL] { - _urlsProvider(context) + switch urlContainer { + case .single(let url): + return [url] + case .multiple(let urls): + return urls + case .dynamic(let provider): + return provider(context) + } } } @@ -54,7 +80,8 @@ public struct MultiplexImage: Hashable, Sendable { extension MultiplexImage { public init(constant: URL) { + self.flag = 0 self.identifier = constant.absoluteString - self._urlsProvider = { _ in [constant] } + self.urlContainer = .single(constant) } }