diff --git a/ios/src_library/React Native/RNIWeak/RNIWeakDictionary.swift b/ios/src_library/React Native/RNIWeak/RNIWeakDictionary.swift new file mode 100644 index 00000000..f7e5d086 --- /dev/null +++ b/ios/src_library/React Native/RNIWeak/RNIWeakDictionary.swift @@ -0,0 +1,55 @@ +// +// RNIWeakDictionary.swift +// react-native-ios-modal +// +// Created by Dominic Go on 3/15/23. +// + +import Foundation + + +public class RNIWeakDictionary { + + public var rawDict: [K: RNIWeakRef] = [:]; + + public var purgedDict: [K: RNIWeakRef] { + get { + self.rawDict.compactMapValues { + $0.rawRef != nil ? $0 : nil; + } + } + }; + + public var dict: [K: RNIWeakRef] { + get { + let purgedDict = self.purgedDict; + self.rawDict = purgedDict; + + return purgedDict; + } + } + + public func set(for key: K, with value: T){ + self.rawDict[key] = RNIWeakRef(with: value as AnyObject); + }; + + public func get(for key: K) -> T? { + guard let ref = self.rawDict[key]?.synthesizedRef else { + self.rawDict.removeValue(forKey: key); + return nil; + }; + + return ref; + }; + + public subscript(key: K) -> T? { + get { + self.get(for: key); + } + set { + guard let ref = newValue else { return }; + self.set(for: key, with: ref); + } + } +}; + diff --git a/ios/src_library/React Native/RNIWeak/RNIWeakRef.swift b/ios/src_library/React Native/RNIWeak/RNIWeakRef.swift index f90db7ef..58fad017 100644 --- a/ios/src_library/React Native/RNIWeak/RNIWeakRef.swift +++ b/ios/src_library/React Native/RNIWeak/RNIWeakRef.swift @@ -19,48 +19,3 @@ public class RNIWeakRef { self.rawRef = ref; }; }; - -public class RNIWeakDictionary { - - public var rawDict: [K: RNIWeakRef] = [:]; - - public var purgedDict: [K: RNIWeakRef] { - get { - self.rawDict.compactMapValues { - $0.rawRef != nil ? $0 : nil; - } - } - }; - - public var dict: [K: RNIWeakRef] { - get { - let purgedDict = self.purgedDict; - self.rawDict = purgedDict; - - return purgedDict; - } - } - - public func set(for key: K, with value: T){ - self.rawDict[key] = RNIWeakRef(with: value as AnyObject); - }; - - public func get(for key: K) -> T? { - guard let ref = self.rawDict[key]?.synthesizedRef else { - self.rawDict.removeValue(forKey: key); - return nil; - }; - - return ref; - }; - - public subscript(key: K) -> T? { - get { - self.get(for: key); - } - set { - guard let ref = newValue else { return }; - self.set(for: key, with: ref); - } - } -};