diff --git a/Sources/XcodeGenKit/NSCacheExtensions.swift b/Sources/XcodeGenKit/NSCacheExtensions.swift new file mode 100644 index 00000000..0ed63887 --- /dev/null +++ b/Sources/XcodeGenKit/NSCacheExtensions.swift @@ -0,0 +1,37 @@ +import XcodeProj +import Foundation + +enum Cached { + case cached(T) + case nothing + + var value: T? { + switch self { + case let .cached(value): return value + case .nothing: return nil + } + } +} + +final class CacheContainer { + let value: Cached + + init(value: Cached) { + self.value = value + } +} + +extension NSCache where KeyType == NSString, ObjectType == CacheContainer { + subscript(aKey: String) -> Cached? { + get { + object(forKey: aKey as NSString)?.value + } + set { + if let value = newValue { + setObject(CacheContainer(value: value), forKey: aKey as NSString) + } else { + removeObject(forKey: aKey as NSString) + } + } + } +} diff --git a/Sources/XcodeGenKit/SettingsBuilder.swift b/Sources/XcodeGenKit/SettingsBuilder.swift index 36a252db..1bf8f794 100644 --- a/Sources/XcodeGenKit/SettingsBuilder.swift +++ b/Sources/XcodeGenKit/SettingsBuilder.swift @@ -160,23 +160,11 @@ extension Project { } } -private enum Cached { - case cached(T) - case nothing - - var value: T? { - switch self { - case let .cached(value): return value - case .nothing: return nil - } - } -} - // cached flattened xcconfig file settings -private var configFileSettings: [String: Cached] = [:] +private var configFileSettings = NSCache() // cached setting preset settings -private var settingPresetSettings: [String: Cached] = [:] +private var settingPresetSettings = NSCache() extension SettingsPresetFile {