Skip to content

Commit a54e380

Browse files
author
Baris Sencan
committed
Merge pull request isair#27 from isair/feature/single-operator
Switch to a single operator
2 parents 84c815a + 23d4bce commit a54e380

6 files changed

Lines changed: 102 additions & 118 deletions

File tree

JSONHelper.podspec

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
Pod::Spec.new do |s|
22
s.name = 'JSONHelper'
3-
s.version = '1.4.2'
3+
s.version = '1.5.0'
44
s.license = { :type => 'zlib', :file => 'LICENSE' }
55
s.summary = 'Lightning fast JSON deserialization and value conversion library for iOS & OS X written in Swift.'
66

JSONHelper/JSONHelper.swift

Lines changed: 52 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -34,12 +34,13 @@ import Foundation
3434
/// type of object as a value.
3535
public typealias JSONDictionary = [String: AnyObject]
3636

37-
// MARK: Operator for quick primitive type deserialization.
37+
/// Operator for use in deserialization operations.
38+
infix operator <-- { associativity right precedence 150 }
3839

39-
infix operator <<< { associativity right precedence 150 }
40+
/// MARK: Primitive Type Deserialization
4041

4142
// For optionals.
42-
public func <<< <T>(inout property: T?, value: AnyObject?) -> T? {
43+
public func <-- <T>(inout property: T?, value: AnyObject?) -> T? {
4344
var newValue: T?
4445
if let unwrappedValue: AnyObject = value {
4546
// We unwrapped the given value successfully, try to convert.
@@ -75,15 +76,15 @@ public func <<< <T>(inout property: T?, value: AnyObject?) -> T? {
7576
}
7677

7778
// For non-optionals.
78-
public func <<< <T>(inout property: T, value: AnyObject?) -> T {
79+
public func <-- <T>(inout property: T, value: AnyObject?) -> T {
7980
var newValue: T?
80-
newValue <<< value
81+
newValue <-- value
8182
if let newValue = newValue { property = newValue }
8283
return property
8384
}
8485

8586
// Special handling for value and format pair to NSDate conversion.
86-
public func <<< (inout property: NSDate?, valueAndFormat: (value: AnyObject?, format: AnyObject?)) -> NSDate? {
87+
public func <-- (inout property: NSDate?, valueAndFormat: (value: AnyObject?, format: AnyObject?)) -> NSDate? {
8788
var newValue: NSDate?
8889
if let dateString = valueAndFormat.value as? String {
8990
if let formatString = valueAndFormat.format as? String {
@@ -98,18 +99,16 @@ public func <<< (inout property: NSDate?, valueAndFormat: (value: AnyObject?, fo
9899
return property
99100
}
100101

101-
public func <<< (inout property: NSDate, valueAndFormat: (value: AnyObject?, format: AnyObject?)) -> NSDate {
102+
public func <-- (inout property: NSDate, valueAndFormat: (value: AnyObject?, format: AnyObject?)) -> NSDate {
102103
var date: NSDate?
103-
date <<< valueAndFormat
104+
date <-- valueAndFormat
104105
if let date = date { property = date }
105106
return property
106107
}
107108

108-
// MARK: Operator for quick primitive array deserialization.
109+
// MARK: Primitive Array Deserialization
109110

110-
infix operator <<<* { associativity right precedence 150 }
111-
112-
public func <<<* (inout array: [String]?, value: AnyObject?) -> [String]? {
111+
public func <-- (inout array: [String]?, value: AnyObject?) -> [String]? {
113112
if let stringArray = value as? [String] {
114113
array = stringArray
115114
} else {
@@ -118,14 +117,14 @@ public func <<<* (inout array: [String]?, value: AnyObject?) -> [String]? {
118117
return array
119118
}
120119

121-
public func <<<* (inout array: [String], value: AnyObject?) -> [String] {
120+
public func <-- (inout array: [String], value: AnyObject?) -> [String] {
122121
var newValue: [String]?
123-
newValue <<<* value
122+
newValue <-- value
124123
if let newValue = newValue { array = newValue }
125124
return array
126125
}
127126

128-
public func <<<* (inout array: [Int]?, value: AnyObject?) -> [Int]? {
127+
public func <-- (inout array: [Int]?, value: AnyObject?) -> [Int]? {
129128
if let intArray = value as? [Int] {
130129
array = intArray
131130
} else {
@@ -134,14 +133,14 @@ public func <<<* (inout array: [Int]?, value: AnyObject?) -> [Int]? {
134133
return array
135134
}
136135

137-
public func <<<* (inout array: [Int], value: AnyObject?) -> [Int] {
136+
public func <-- (inout array: [Int], value: AnyObject?) -> [Int] {
138137
var newValue: [Int]?
139-
newValue <<<* value
138+
newValue <-- value
140139
if let newValue = newValue { array = newValue }
141140
return array
142141
}
143142

144-
public func <<<* (inout array: [Float]?, value: AnyObject?) -> [Float]? {
143+
public func <-- (inout array: [Float]?, value: AnyObject?) -> [Float]? {
145144

146145
if let floatArray = value as? [Float] {
147146
array = floatArray
@@ -151,14 +150,14 @@ public func <<<* (inout array: [Float]?, value: AnyObject?) -> [Float]? {
151150
return array
152151
}
153152

154-
public func <<<* (inout array: [Float], value: AnyObject?) -> [Float] {
153+
public func <-- (inout array: [Float], value: AnyObject?) -> [Float] {
155154
var newValue: [Float]?
156-
newValue <<<* value
155+
newValue <-- value
157156
if let newValue = newValue { array = newValue }
158157
return array
159158
}
160159

161-
public func <<<* (inout array: [Double]?, value: AnyObject?) -> [Double]? {
160+
public func <-- (inout array: [Double]?, value: AnyObject?) -> [Double]? {
162161
if let doubleArrayDoubleExcitement = value as? [Double] {
163162
array = doubleArrayDoubleExcitement
164163
} else {
@@ -167,14 +166,14 @@ public func <<<* (inout array: [Double]?, value: AnyObject?) -> [Double]? {
167166
return array
168167
}
169168

170-
public func <<<* (inout array: [Double], value: AnyObject?) -> [Double] {
169+
public func <-- (inout array: [Double], value: AnyObject?) -> [Double] {
171170
var newValue: [Double]?
172-
newValue <<<* value
171+
newValue <-- value
173172
if let newValue = newValue { array = newValue }
174173
return array
175174
}
176175

177-
public func <<<* (inout array: [Bool]?, value: AnyObject?) -> [Bool]? {
176+
public func <-- (inout array: [Bool]?, value: AnyObject?) -> [Bool]? {
178177
if let boolArray = value as? [Bool] {
179178
array = boolArray
180179
} else {
@@ -183,14 +182,14 @@ public func <<<* (inout array: [Bool]?, value: AnyObject?) -> [Bool]? {
183182
return array
184183
}
185184

186-
public func <<<* (inout array: [Bool], value: AnyObject?) -> [Bool] {
185+
public func <-- (inout array: [Bool], value: AnyObject?) -> [Bool] {
187186
var newValue: [Bool]?
188-
newValue <<<* value
187+
newValue <-- value
189188
if let newValue = newValue { array = newValue }
190189
return array
191190
}
192191

193-
public func <<<* (inout array: [NSURL]?, value: AnyObject?) -> [NSURL]? {
192+
public func <-- (inout array: [NSURL]?, value: AnyObject?) -> [NSURL]? {
194193
if let stringURLArray = value as? [String] {
195194
array = [NSURL]()
196195
for stringURL in stringURLArray {
@@ -204,14 +203,14 @@ public func <<<* (inout array: [NSURL]?, value: AnyObject?) -> [NSURL]? {
204203
return array
205204
}
206205

207-
public func <<<* (inout array: [NSURL], value: AnyObject?) -> [NSURL] {
206+
public func <-- (inout array: [NSURL], value: AnyObject?) -> [NSURL] {
208207
var newValue: [NSURL]?
209-
newValue <<<* value
208+
newValue <-- value
210209
if let newValue = newValue { array = newValue }
211210
return array
212211
}
213212

214-
public func <<<* (inout array: [NSDate]?, valueAndFormat: (value: AnyObject?, format: AnyObject?)) -> [NSDate]? {
213+
public func <-- (inout array: [NSDate]?, valueAndFormat: (value: AnyObject?, format: AnyObject?)) -> [NSDate]? {
215214
var newValue: [NSDate]?
216215
if let dateStringArray = valueAndFormat.value as? [String] {
217216
if let formatString = valueAndFormat.format as? String {
@@ -229,21 +228,19 @@ public func <<<* (inout array: [NSDate]?, valueAndFormat: (value: AnyObject?, fo
229228
return array
230229
}
231230

232-
public func <<<* (inout array: [NSDate], valueAndFormat: (value: AnyObject?, format: AnyObject?)) -> [NSDate] {
231+
public func <-- (inout array: [NSDate], valueAndFormat: (value: AnyObject?, format: AnyObject?)) -> [NSDate] {
233232
var newValue: [NSDate]?
234-
newValue <<<* valueAndFormat
233+
newValue <-- valueAndFormat
235234
if let newValue = newValue { array = newValue }
236235
return array
237236
}
238237

239-
public func <<<* (inout array: [NSDate]?, value: AnyObject?) -> [NSDate]? {
240-
238+
public func <-- (inout array: [NSDate]?, value: AnyObject?) -> [NSDate]? {
241239
if let timestamps = value as? [AnyObject] {
242240
array = [NSDate]()
243-
244241
for timestamp in timestamps {
245242
var date: NSDate?
246-
date <<< timestamp
243+
date <-- timestamp
247244
if date != nil { array!.append(date!) }
248245
}
249246
} else {
@@ -252,22 +249,20 @@ public func <<<* (inout array: [NSDate]?, value: AnyObject?) -> [NSDate]? {
252249
return array
253250
}
254251

255-
public func <<<* (inout array: [NSDate], value: AnyObject?) -> [NSDate] {
252+
public func <-- (inout array: [NSDate], value: AnyObject?) -> [NSDate] {
256253
var newValue: [NSDate]?
257-
newValue <<<* value
254+
newValue <-- value
258255
if let newValue = newValue { array = newValue }
259256
return array
260257
}
261258

262-
// MARK: Operator for quick class deserialization.
263-
264-
infix operator <<<< { associativity right precedence 150 }
259+
// MARK: Custom Object Deserialization
265260

266261
public protocol Deserializable {
267262
init(data: JSONDictionary)
268263
}
269264

270-
public func <<<< <T: Deserializable>(inout instance: T?, dataObject: AnyObject?) -> T? {
265+
public func <-- <T: Deserializable>(inout instance: T?, dataObject: AnyObject?) -> T? {
271266
if let data = dataObject as? JSONDictionary {
272267
instance = T(data: data)
273268
} else {
@@ -276,18 +271,16 @@ public func <<<< <T: Deserializable>(inout instance: T?, dataObject: AnyObject?)
276271
return instance
277272
}
278273

279-
public func <<<< <T: Deserializable>(inout instance: T, dataObject: AnyObject?) -> T {
274+
public func <-- <T: Deserializable>(inout instance: T, dataObject: AnyObject?) -> T {
280275
var newInstance: T?
281-
newInstance <<<< dataObject
276+
newInstance <-- dataObject
282277
if let newInstance = newInstance { instance = newInstance }
283278
return instance
284279
}
285280

286-
// MARK: Operator for quick deserialization into an array of instances of a deserializable class.
287-
288-
infix operator <<<<* { associativity right precedence 150 }
281+
// MARK: Custom Object Array Deserialization
289282

290-
public func <<<<* <T: Deserializable>(inout array: [T]?, dataObject: AnyObject?) -> [T]? {
283+
public func <-- <T: Deserializable>(inout array: [T]?, dataObject: AnyObject?) -> [T]? {
291284
if let dataArray = dataObject as? [JSONDictionary] {
292285
array = [T]()
293286
for data in dataArray {
@@ -299,33 +292,33 @@ public func <<<<* <T: Deserializable>(inout array: [T]?, dataObject: AnyObject?)
299292
return array
300293
}
301294

302-
public func <<<<* <T: Deserializable>(inout array: [T], dataObject: AnyObject?) -> [T] {
295+
public func <-- <T: Deserializable>(inout array: [T], dataObject: AnyObject?) -> [T] {
303296
var newArray: [T]?
304-
newArray <<<<* dataObject
297+
newArray <-- dataObject
305298
if let newArray = newArray { array = newArray }
306299
return array
307300
}
308301

309-
// MARK: Overloading of own operators for deserialization of JSON strings.
302+
// MARK: JSON String Deserialization
310303

311304
private func dataStringToObject(dataString: String) -> AnyObject? {
312305
var data: NSData = dataString.dataUsingEncoding(NSUTF8StringEncoding)!
313306
var error: NSError?
314307
return NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions(0), error: &error)
315308
}
316309

317-
public func <<<< <T: Deserializable>(inout instance: T?, dataString: String) -> T? {
318-
return instance <<<< dataStringToObject(dataString)
310+
public func <-- <T: Deserializable>(inout instance: T?, dataString: String) -> T? {
311+
return instance <-- dataStringToObject(dataString)
319312
}
320313

321-
public func <<<< <T: Deserializable>(inout instance: T, dataString: String) -> T {
322-
return instance <<<< dataStringToObject(dataString)
314+
public func <-- <T: Deserializable>(inout instance: T, dataString: String) -> T {
315+
return instance <-- dataStringToObject(dataString)
323316
}
324317

325-
public func <<<<* <T: Deserializable>(inout array: [T]?, dataString: String) -> [T]? {
326-
return array <<<<* dataStringToObject(dataString)
318+
public func <-- <T: Deserializable>(inout array: [T]?, dataString: String) -> [T]? {
319+
return array <-- dataStringToObject(dataString)
327320
}
328321

329-
public func <<<<* <T: Deserializable>(inout array: [T], dataString: String) -> [T] {
330-
return array <<<<* dataStringToObject(dataString)
322+
public func <-- <T: Deserializable>(inout array: [T], dataString: String) -> [T] {
323+
return array <-- dataStringToObject(dataString)
331324
}

JSONHelper/Supporting Files/Mac/Info.plist

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,11 @@
1515
<key>CFBundlePackageType</key>
1616
<string>FMWK</string>
1717
<key>CFBundleShortVersionString</key>
18-
<string>1.4.2</string>
18+
<string>1.5.0</string>
1919
<key>CFBundleSignature</key>
2020
<string>????</string>
2121
<key>CFBundleVersion</key>
22-
<string>11</string>
22+
<string>12</string>
2323
<key>NSPrincipalClass</key>
2424
<string></string>
2525
</dict>

JSONHelper/Supporting Files/iOS/Info.plist

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,11 @@
1515
<key>CFBundlePackageType</key>
1616
<string>FMWK</string>
1717
<key>CFBundleShortVersionString</key>
18-
<string>1.4.2</string>
18+
<string>1.5.0</string>
1919
<key>CFBundleSignature</key>
2020
<string>????</string>
2121
<key>CFBundleVersion</key>
22-
<string>11</string>
22+
<string>12</string>
2323
<key>NSPrincipalClass</key>
2424
<string></string>
2525
</dict>

0 commit comments

Comments
 (0)