@@ -76,6 +76,16 @@ public class Selector1<State, S1, Value>: Selector<State, Value> where
76
76
self . projector = projector
77
77
super. init ( projector: { projector ( selector1. map ( $0) ) } )
78
78
}
79
+
80
+ /**
81
+ Creates a `Selector` from a `Selector` and a `projector` function.
82
+
83
+ - Parameter selector1: The first `Selector`
84
+ - Parameter projector: The closure to pass the value from the `Selector` to
85
+ */
86
+ public convenience init ( _ selector1: S1 , keyPath: KeyPath < S1 . Value , Value > ) {
87
+ self . init ( selector1) { $0 [ keyPath: keyPath] }
88
+ }
79
89
}
80
90
81
91
/// A `Selector` created from two `Selector`s and a `projector` function.
@@ -122,8 +132,8 @@ public class Selector3<State, S1, S2, S3, Value>: Selector<State, Value> where
122
132
_ projector: @escaping ( S1 . Value , S2 . Value , S3 . Value ) -> Value ) {
123
133
self . projector = projector
124
134
super. init ( projector: { projector ( selector1. map ( $0) ,
125
- selector2. map ( $0) ,
126
- selector3. map ( $0) ) } )
135
+ selector2. map ( $0) ,
136
+ selector3. map ( $0) ) } )
127
137
}
128
138
}
129
139
@@ -152,9 +162,9 @@ public class Selector4<State, S1, S2, S3, S4, Value>: Selector<State, Value> whe
152
162
_ projector: @escaping ( S1 . Value , S2 . Value , S3 . Value , S4 . Value ) -> Value ) {
153
163
self . projector = projector
154
164
super. init ( projector: { projector ( selector1. map ( $0) ,
155
- selector2. map ( $0) ,
156
- selector3. map ( $0) ,
157
- selector4. map ( $0) ) } )
165
+ selector2. map ( $0) ,
166
+ selector3. map ( $0) ,
167
+ selector4. map ( $0) ) } )
158
168
}
159
169
}
160
170
@@ -186,10 +196,10 @@ public class Selector5<State, S1, S2, S3, S4, S5, Value>: Selector<State, Value>
186
196
_ projector: @escaping ( S1 . Value , S2 . Value , S3 . Value , S4 . Value , S5 . Value ) -> Value ) {
187
197
self . projector = projector
188
198
super. init ( projector: { projector ( selector1. map ( $0) ,
189
- selector2. map ( $0) ,
190
- selector3. map ( $0) ,
191
- selector4. map ( $0) ,
192
- selector5. map ( $0) ) } )
199
+ selector2. map ( $0) ,
200
+ selector3. map ( $0) ,
201
+ selector4. map ( $0) ,
202
+ selector5. map ( $0) ) } )
193
203
}
194
204
}
195
205
@@ -208,6 +218,20 @@ public extension Selector {
208
218
. init( selector1, projector)
209
219
}
210
220
221
+ /**
222
+ Creates a `Selector` from a `Selector` and a `KeyPath`.
223
+
224
+ - Parameter selector1: The first `Selector`
225
+ - Parameter keyPath: The `keyPath` to create the `Selector` from
226
+ - Parameter keyPath: The `KeyPath` to subscript in the value from the `Selector`
227
+ - Returns: A `Selector` from the given `Selector` and the `KeyPath`
228
+ */
229
+ static func with< S1> ( _ selector1: S1 ,
230
+ keyPath: KeyPath < S1 . Value , Value > )
231
+ -> Selector1 < State , S1 , Value > {
232
+ . init( selector1, keyPath: keyPath)
233
+ }
234
+
211
235
/**
212
236
Creates a `Selector` from two `Selector`s and a `projector` function.
213
237
0 commit comments