@@ -15,8 +15,8 @@ open class NSPredicate : NSObject, NSSecureCoding, NSCopying {
15
15
private enum PredicateKind {
16
16
case boolean( Bool )
17
17
case block( ( Any ? , [ String : Any ] ? ) -> Bool )
18
- // TODO: case for init( format:argumentArray: )
19
- // TODO: case for init(fromMetadataQueryString: )
18
+ case format( String )
19
+ case metadataQuery ( String )
20
20
}
21
21
22
22
private let kind : PredicateKind
@@ -41,11 +41,17 @@ open class NSPredicate : NSObject, NSSecureCoding, NSCopying {
41
41
preconditionFailure ( " Unkeyed coding is unsupported. " )
42
42
}
43
43
44
+ //TODO: store kind key for .boolean, .format, .metadataQuery
45
+
44
46
switch self . kind {
45
47
case . boolean( let value) :
46
48
aCoder. encode ( value, forKey: " NS.boolean.value " )
47
49
case . block:
48
50
preconditionFailure ( " NSBlockPredicate cannot be encoded or decoded. " )
51
+ case . format:
52
+ NSUnimplemented ( )
53
+ case . metadataQuery:
54
+ NSUnimplemented ( )
49
55
}
50
56
}
51
57
@@ -59,6 +65,10 @@ open class NSPredicate : NSObject, NSSecureCoding, NSCopying {
59
65
return NSPredicate ( value: value)
60
66
case . block( let block) :
61
67
return NSPredicate ( block: block)
68
+ case . format:
69
+ NSUnimplemented ( )
70
+ case . metadataQuery:
71
+ NSUnimplemented ( )
62
72
}
63
73
}
64
74
@@ -70,10 +80,12 @@ open class NSPredicate : NSObject, NSSecureCoding, NSCopying {
70
80
switch ( other. kind, self . kind) {
71
81
case ( . boolean( let otherBool) , . boolean( let selfBool) ) :
72
82
return otherBool == selfBool
73
- // TODO: case for init(format:argumentArray:)
74
- // TODO: case for init(fromMetadataQueryString:)
75
- // NSBlockPredicate returns false even for copy
83
+ case ( . format, . format) :
84
+ NSUnimplemented ( )
85
+ case ( . metadataQuery, . metadataQuery) :
86
+ NSUnimplemented ( )
76
87
default :
88
+ // NSBlockPredicate returns false even for copy
77
89
return false
78
90
}
79
91
}
@@ -108,6 +120,10 @@ open class NSPredicate : NSObject, NSSecureCoding, NSCopying {
108
120
// let address = unsafeBitCast(block, to: Int.self)
109
121
// return String(format:"BLOCKPREDICATE(%2X)", address)
110
122
return " BLOCKPREDICATE "
123
+ case . format:
124
+ NSUnimplemented ( )
125
+ case . metadataQuery:
126
+ NSUnimplemented ( )
111
127
}
112
128
}
113
129
@@ -127,6 +143,10 @@ open class NSPredicate : NSObject, NSSecureCoding, NSCopying {
127
143
return value
128
144
case let . block( block) :
129
145
return block ( object, bindings)
146
+ case . format:
147
+ NSUnimplemented ( )
148
+ case . metadataQuery:
149
+ NSUnimplemented ( )
130
150
}
131
151
} // single pass evaluation substituting variables from the bindings dictionary for any variable expressions encountered
132
152
0 commit comments