@@ -23,6 +23,9 @@ fileprivate func unwrap(_ object: Any?) -> Any {
2323 case let lookupRawValue as LookupRawValue :
2424 return lookupRawValue. lookupRawValue
2525 case let number as NSNumber :
26+ if String ( describing: type ( of: number) ) == " __NSCFBoolean " {
27+ return number. boolValue
28+ }
2629 return number
2730 case let str as String :
2831 return str
@@ -57,6 +60,7 @@ public struct Lookup: @unchecked Sendable {
5760 case object
5861 case number
5962 case string
63+ case bool
6064 }
6165
6266 public var rawValue : Any {
@@ -74,10 +78,13 @@ public struct Lookup: @unchecked Sendable {
7478 return rawNumber
7579 case . string:
7680 return rawString
81+ case . bool:
82+ return rawBool
7783 }
7884 }
7985 }
8086
87+ var rawBool : Bool = false
8188 var rawType : RawType
8289 var rawDict : [ String : Any ] = [ : ]
8390 var rawArray : [ Any ] = [ ]
@@ -94,8 +101,13 @@ public struct Lookup: @unchecked Sendable {
94101 default :
95102 switch unwrap ( jsonObject) {
96103 case let number as NSNumber :
97- self . rawNumber = number
98- self . rawType = . number
104+ if String ( describing: type ( of: number) ) == " __NSCFBoolean " {
105+ self . rawBool = number. boolValue
106+ self . rawType = . bool
107+ } else {
108+ self . rawNumber = number
109+ self . rawType = . number
110+ }
99111
100112 case let str as String :
101113 self . rawString = str
@@ -166,6 +178,10 @@ public struct Lookup: @unchecked Sendable {
166178 switch rawType {
167179 case . none:
168180 return . null
181+
182+ case . bool:
183+ return Lookup ( rawBool)
184+
169185 case . dict, . object:
170186 let value : Any = rawDict [ key, default: NSNull ( ) ]
171187 let innerLookup = Lookup ( value)
@@ -189,15 +205,20 @@ public struct Lookup: @unchecked Sendable {
189205 }
190206
191207 switch rawType {
208+ case . bool:
209+ return Lookup ( rawBool)
210+
192211 case . dict, . object:
193212 return Lookup ( rawDict [ dynamicMember, default: NSNull ( ) ] )
213+
194214 case . array, . string:
195215 if dynamicMember. isPurnInt,
196216 let index = Int ( dynamicMember)
197217 {
198218 return self [ index]
199219 }
200220 return . null
221+
201222 default :
202223 return . null
203224 }
@@ -229,7 +250,7 @@ public struct Lookup: @unchecked Sendable {
229250 switch _value. rawType {
230251 case . none, . number, . string:
231252 _value = value
232- case . dict, . object:
253+ case . dict, . object, . bool :
233254 _value. rawDict [ finalKey] = value. rawValue
234255 case . array:
235256 if inner {
@@ -250,7 +271,7 @@ public struct Lookup: @unchecked Sendable {
250271 switch rawType {
251272 case . none, . number, . string:
252273 self = value
253- case . dict, . object:
274+ case . dict, . object, . bool :
254275 rawDict [ dynamicMember] = value. rawValue
255276 case . array:
256277 if dynamicMember. isPurnInt, let index = Int ( dynamicMember) {
@@ -559,10 +580,15 @@ public extension Lookup {
559580
560581 // MARK: - Bool
561582 var bool : Bool ? {
562- ( string as NSString ? ) ? . boolValue
583+ switch rawType {
584+ case . bool:
585+ rawBool
586+ default :
587+ ( string as NSString ? ) ? . boolValue
588+ }
563589 }
564590 var boolValue : Bool {
565- ( string! as NSString ) . boolValue
591+ self . bool!
566592 }
567593
568594 // MARK: - Dict
@@ -765,14 +791,14 @@ extension Lookup: Codable {
765791 }
766792 // try to decode value
767793 switch type {
794+ case let boolType as Bool . Type :
795+ object = try ? container. decode ( boolType)
768796 case let stringType as String . Type :
769797 object = try ? container. decode ( stringType)
770798 case let jsonValueArrayType as [ Lookup ] . Type:
771799 object = try ? container. decode ( jsonValueArrayType)
772800 case let jsonValueDictType as [ String : Lookup ] . Type:
773801 object = try ? container. decode ( jsonValueDictType)
774- case let boolType as Bool . Type :
775- object = try ? container. decode ( boolType)
776802 case let doubleType as Double . Type :
777803 object = try ? container. decode ( doubleType)
778804 case let uintType as UInt . Type :
@@ -902,6 +928,8 @@ extension Lookup: Swift.CustomStringConvertible, Swift.CustomDebugStringConverti
902928 desc = " \( rawNumber) "
903929 case . string:
904930 desc = " \( rawValue) "
931+ case . bool:
932+ desc = " \( rawBool) "
905933 case . none:
906934 desc = " nil "
907935 }
@@ -932,7 +960,7 @@ extension Lookup {
932960
933961 public func compactMapValues( keepKeyOfEmptyValue: Bool = false ) -> Lookup {
934962 switch rawType {
935- case . none, . number:
963+ case . none, . number, . bool :
936964 return self
937965 case . string:
938966 return self
0 commit comments