Skip to content

Commit f56cb4c

Browse files
committed
<-- no longer throws
1 parent b37bf6b commit f56cb4c

17 files changed

+138
-132
lines changed

JSONHelper.podspec

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
Pod::Spec.new do |s|
22
s.name = 'JSONHelper'
3-
s.version = '2.0.0'
3+
s.version = '2.1.0'
44
s.license = { :type => 'zlib', :file => 'LICENSE' }
5-
s.summary = 'Lightning fast JSON deserialization and value conversion library for iOS, tvOS, and OS X written in Swift.'
5+
s.summary = 'Convert anything into anything in one operation; hex strings into UIColor/NSColor, JSON strings into class instances, y/n strings to booleans, arrays and dictionaries of these; anything you can make sense of!'
66

77
s.homepage = 'https://github.com/isair/JSONHelper'
88
s.author = { 'Baris Sencan' => 'baris.sncn@gmail.com' }

JSONHelper/Conversion.swift

Lines changed: 42 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ public protocol Convertible {
2626

2727
// MARK: - Basic Conversion
2828

29-
public func <-- <T, U>(inout lhs: T?, rhs: U?) throws -> T? {
29+
public func <-- <T, U>(inout lhs: T?, rhs: U?) -> T? {
3030
if !(lhs is NSNull) {
3131
lhs = JSONHelper.convertToNilIfNull(rhs) as? T
3232
} else {
@@ -35,28 +35,41 @@ public func <-- <T, U>(inout lhs: T?, rhs: U?) throws -> T? {
3535
return lhs
3636
}
3737

38-
public func <-- <T, U>(inout lhs: T, rhs: U?) throws -> T {
38+
public func <-- <T, U>(inout lhs: T, rhs: U?) -> T {
3939
var newValue: T?
40-
try newValue <-- rhs
40+
newValue <-- rhs
4141
lhs = newValue ?? lhs
4242
return lhs
4343
}
4444

45-
public func <-- <C: Convertible, T>(inout lhs: C?, rhs: T?) throws -> C? {
46-
lhs = try C.convertFromValue(JSONHelper.convertToNilIfNull(rhs))
45+
public func <-- <C: Convertible, T>(inout lhs: C?, rhs: T?) -> C? {
46+
lhs = nil
47+
48+
do {
49+
lhs = try C.convertFromValue(JSONHelper.convertToNilIfNull(rhs))
50+
} catch ConversionError.InvalidValue {
51+
#if DEBUG
52+
print("Invalid value \(rhs.debugDescription) for supported type.")
53+
#endif
54+
} catch ConversionError.UnsupportedType {
55+
#if DEBUG
56+
print("Unsupported type.")
57+
#endif
58+
} catch {}
59+
4760
return lhs
4861
}
4962

50-
public func <-- <C: Convertible, T>(inout lhs: C, rhs: T?) throws -> C {
63+
public func <-- <C: Convertible, T>(inout lhs: C, rhs: T?) -> C {
5164
var newValue: C?
52-
try newValue <-- rhs
65+
newValue <-- rhs
5366
lhs = newValue ?? lhs
5467
return lhs
5568
}
5669

5770
// MARK: - Array Conversion
5871

59-
public func <-- <C: Convertible, T>(inout lhs: [C]?, rhs: [T]?) throws -> [C]? {
72+
public func <-- <C: Convertible, T>(inout lhs: [C]?, rhs: [T]?) -> [C]? {
6073
guard let rhs = rhs else {
6174
lhs = nil
6275
return lhs
@@ -65,7 +78,8 @@ public func <-- <C: Convertible, T>(inout lhs: [C]?, rhs: [T]?) throws -> [C]? {
6578
lhs = [C]()
6679
for element in rhs {
6780
var convertedElement: C?
68-
try convertedElement <-- element
81+
convertedElement <-- element
82+
6983
if let convertedElement = convertedElement {
7084
lhs?.append(convertedElement)
7185
}
@@ -74,36 +88,36 @@ public func <-- <C: Convertible, T>(inout lhs: [C]?, rhs: [T]?) throws -> [C]? {
7488
return lhs
7589
}
7690

77-
public func <-- <C: Convertible, T>(inout lhs: [C], rhs: [T]?) throws -> [C] {
91+
public func <-- <C: Convertible, T>(inout lhs: [C], rhs: [T]?) -> [C] {
7892
var newValue: [C]?
79-
try newValue <-- rhs
93+
newValue <-- rhs
8094
lhs = newValue ?? lhs
8195
return lhs
8296
}
8397

84-
public func <-- <C: Convertible, T>(inout lhs: [C]?, rhs: T?) throws -> [C]? {
98+
public func <-- <C: Convertible, T>(inout lhs: [C]?, rhs: T?) -> [C]? {
8599
guard let rhs = rhs else {
86100
lhs = nil
87101
return lhs
88102
}
89103

90104
if let elements = rhs as? NSArray as? [AnyObject] {
91-
return try lhs <-- elements
105+
return lhs <-- elements
92106
}
93107

94-
throw ConversionError.UnsupportedType
108+
return nil
95109
}
96110

97-
public func <-- <C: Convertible, T>(inout lhs: [C], rhs: T?) throws -> [C] {
111+
public func <-- <C: Convertible, T>(inout lhs: [C], rhs: T?) -> [C] {
98112
var newValue: [C]?
99-
try newValue <-- rhs
113+
newValue <-- rhs
100114
lhs = newValue ?? lhs
101115
return lhs
102116
}
103117

104118
// MARK: - Dictionary Conversion
105119

106-
public func <-- <T, C: Convertible, U>(inout lhs: [T : C]?, rhs: [T : U]?) throws -> [T : C]? {
120+
public func <-- <T, C: Convertible, U>(inout lhs: [T : C]?, rhs: [T : U]?) -> [T : C]? {
107121
guard let rhs = rhs else {
108122
lhs = nil
109123
return lhs
@@ -112,7 +126,7 @@ public func <-- <T, C: Convertible, U>(inout lhs: [T : C]?, rhs: [T : U]?) throw
112126
lhs = [T : C]()
113127
for (key, value) in rhs {
114128
var convertedValue: C?
115-
try convertedValue <-- value
129+
convertedValue <-- value
116130
if let convertedValue = convertedValue {
117131
lhs?[key] = convertedValue
118132
}
@@ -121,36 +135,36 @@ public func <-- <T, C: Convertible, U>(inout lhs: [T : C]?, rhs: [T : U]?) throw
121135
return lhs
122136
}
123137

124-
public func <-- <T, C: Convertible, U>(inout lhs: [T : C], rhs: [T : U]?) throws -> [T : C] {
138+
public func <-- <T, C: Convertible, U>(inout lhs: [T : C], rhs: [T : U]?) -> [T : C] {
125139
var newValue: [T : C]?
126-
try newValue <-- rhs
140+
newValue <-- rhs
127141
lhs = newValue ?? lhs
128142
return lhs
129143
}
130144

131-
public func <-- <T, C: Convertible, U>(inout lhs: [T : C]?, rhs: U?) throws -> [T : C]? {
145+
public func <-- <T, C: Convertible, U>(inout lhs: [T : C]?, rhs: U?) -> [T : C]? {
132146
guard let rhs = rhs else {
133147
lhs = nil
134148
return lhs
135149
}
136150

137151
if let elements = rhs as? NSDictionary as? [T : AnyObject] {
138-
return try lhs <-- elements
152+
return lhs <-- elements
139153
}
140154

141-
throw ConversionError.UnsupportedType
155+
return nil
142156
}
143157

144-
public func <-- <T, C: Convertible, U>(inout lhs: [T : C], rhs: U?) throws -> [T : C] {
158+
public func <-- <T, C: Convertible, U>(inout lhs: [T : C], rhs: U?) -> [T : C] {
145159
var newValue: [T : C]?
146-
try newValue <-- rhs
160+
newValue <-- rhs
147161
lhs = newValue ?? lhs
148162
return lhs
149163
}
150164

151165
// MARK: - Enum Conversion
152166

153-
public func <-- <T: RawRepresentable, U>(inout lhs: T?, rhs: U?) throws -> T? {
167+
public func <-- <T: RawRepresentable, U>(inout lhs: T?, rhs: U?) -> T? {
154168
var newValue: T?
155169

156170
if let
@@ -163,9 +177,9 @@ public func <-- <T: RawRepresentable, U>(inout lhs: T?, rhs: U?) throws -> T? {
163177
return lhs
164178
}
165179

166-
public func <-- <T: RawRepresentable, U>(inout lhs: T, rhs: U?) throws -> T {
180+
public func <-- <T: RawRepresentable, U>(inout lhs: T, rhs: U?) -> T {
167181
var newValue: T?
168-
try newValue <-- rhs
182+
newValue <-- rhs
169183
lhs = newValue ?? lhs
170184
return lhs
171185
}

JSONHelper/Deserialization.swift

Lines changed: 26 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import Foundation
88
public protocol Deserializable {
99

1010
/// TODOC
11-
init(dictionary: [String : AnyObject]) throws
11+
init(dictionary: [String : AnyObject])
1212
}
1313

1414
// MARK: - Helper Methods
@@ -24,36 +24,37 @@ private func dataStringToObject(dataString: String) -> AnyObject? {
2424

2525
// MARK: - Basic Deserialization
2626

27-
public func <-- <D: Deserializable, T>(inout lhs: D?, rhs: T?) throws -> D? {
27+
public func <-- <D: Deserializable, T>(inout lhs: D?, rhs: T?) -> D? {
2828
let cleanedValue = JSONHelper.convertToNilIfNull(rhs)
2929

3030
if let jsonObject = cleanedValue as? NSDictionary as? [String : AnyObject] {
31-
lhs = try D(dictionary: jsonObject)
31+
lhs = D(dictionary: jsonObject)
3232
} else if let string = cleanedValue as? String {
33-
try lhs <-- dataStringToObject(string)
33+
lhs <-- dataStringToObject(string)
3434
} else {
3535
lhs = nil
3636
}
3737

3838
return lhs
3939
}
4040

41-
public func <-- <D: Deserializable, T>(inout lhs: D, rhs: T?) throws -> D {
41+
public func <-- <D: Deserializable, T>(inout lhs: D, rhs: T?) -> D {
4242
var newValue: D?
43-
try newValue <-- rhs
43+
newValue <-- rhs
4444
lhs = newValue ?? lhs
4545
return lhs
4646
}
4747

4848
// MARK: - Array Deserialization
4949

50-
public func <-- <D: Deserializable, T>(inout lhs: [D]?, rhs: [T]?) throws -> [D]? {
50+
public func <-- <D: Deserializable, T>(inout lhs: [D]?, rhs: [T]?) -> [D]? {
5151
guard let rhs = rhs else { return nil }
5252

5353
lhs = [D]()
5454
for element in rhs {
5555
var convertedElement: D?
56-
try convertedElement <-- element
56+
convertedElement <-- element
57+
5758
if let convertedElement = convertedElement {
5859
lhs?.append(convertedElement)
5960
}
@@ -62,33 +63,33 @@ public func <-- <D: Deserializable, T>(inout lhs: [D]?, rhs: [T]?) throws -> [D]
6263
return lhs
6364
}
6465

65-
public func <-- <D: Deserializable, T>(inout lhs: [D], rhs: [T]?) throws -> [D] {
66+
public func <-- <D: Deserializable, T>(inout lhs: [D], rhs: [T]?) -> [D] {
6667
var newValue: [D]?
67-
try newValue <-- rhs
68+
newValue <-- rhs
6869
lhs = newValue ?? lhs
6970
return lhs
7071
}
7172

72-
public func <-- <D: Deserializable, T>(inout lhs: [D]?, rhs: T?) throws -> [D]? {
73+
public func <-- <D: Deserializable, T>(inout lhs: [D]?, rhs: T?) -> [D]? {
7374
guard let rhs = rhs else { return nil }
7475

7576
if let elements = rhs as? NSArray as? [AnyObject] {
76-
return try lhs <-- elements
77+
return lhs <-- elements
7778
}
7879

79-
throw ConversionError.UnsupportedType
80+
return nil
8081
}
8182

82-
public func <-- <D: Deserializable, T>(inout lhs: [D], rhs: T?) throws -> [D] {
83+
public func <-- <D: Deserializable, T>(inout lhs: [D], rhs: T?) -> [D] {
8384
var newValue: [D]?
84-
try newValue <-- rhs
85+
newValue <-- rhs
8586
lhs = newValue ?? lhs
8687
return lhs
8788
}
8889

8990
// MARK: - Dictionary Deserialization
9091

91-
public func <-- <T, D: Deserializable, U>(inout lhs: [T : D]?, rhs: [T : U]?) throws -> [T : D]? {
92+
public func <-- <T, D: Deserializable, U>(inout lhs: [T : D]?, rhs: [T : U]?) -> [T : D]? {
9293
guard let rhs = rhs else {
9394
lhs = nil
9495
return lhs
@@ -97,7 +98,8 @@ public func <-- <T, D: Deserializable, U>(inout lhs: [T : D]?, rhs: [T : U]?) th
9798
lhs = [T : D]()
9899
for (key, value) in rhs {
99100
var convertedValue: D?
100-
try convertedValue <-- value
101+
convertedValue <-- value
102+
101103
if let convertedValue = convertedValue {
102104
lhs?[key] = convertedValue
103105
}
@@ -106,29 +108,29 @@ public func <-- <T, D: Deserializable, U>(inout lhs: [T : D]?, rhs: [T : U]?) th
106108
return lhs
107109
}
108110

109-
public func <-- <T, D: Deserializable, U>(inout lhs: [T : D], rhs: [T : U]?) throws -> [T : D] {
111+
public func <-- <T, D: Deserializable, U>(inout lhs: [T : D], rhs: [T : U]?) -> [T : D] {
110112
var newValue: [T : D]?
111-
try newValue <-- rhs
113+
newValue <-- rhs
112114
lhs = newValue ?? lhs
113115
return lhs
114116
}
115117

116-
public func <-- <T, D: Deserializable, U>(inout lhs: [T : D]?, rhs: U?) throws -> [T : D]? {
118+
public func <-- <T, D: Deserializable, U>(inout lhs: [T : D]?, rhs: U?) -> [T : D]? {
117119
guard let rhs = rhs else {
118120
lhs = nil
119121
return lhs
120122
}
121123

122124
if let elements = rhs as? NSDictionary as? [T : AnyObject] {
123-
return try lhs <-- elements
125+
return lhs <-- elements
124126
}
125127

126-
throw ConversionError.UnsupportedType
128+
return nil
127129
}
128130

129-
public func <-- <T, D: Deserializable, U>(inout lhs: [T : D], rhs: U?) throws -> [T : D] {
131+
public func <-- <T, D: Deserializable, U>(inout lhs: [T : D], rhs: U?) -> [T : D] {
130132
var newValue: [T : D]?
131-
try newValue <-- rhs
133+
newValue <-- rhs
132134
lhs = newValue ?? lhs
133135
return lhs
134136
}

JSONHelperTests/ArrayTests.swift

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ class ArrayTests: XCTestCase {
1515

1616
func testArrayToConvertibleArray() {
1717
var urls = [NSURL]()
18-
try! urls <-- urlStrings
18+
urls <-- urlStrings
1919

2020
XCTAssertEqual(urls[0].host, urlHosts[0])
2121
XCTAssertEqual(urls[1].host, urlHosts[1])
@@ -24,7 +24,7 @@ class ArrayTests: XCTestCase {
2424

2525
func testArrayAsAnyToConvertibleArray() {
2626
var urls = [NSURL]()
27-
try! urls <-- (urlStrings as Any)
27+
urls <-- (urlStrings as Any)
2828

2929
XCTAssertEqual(urls[0].host, urlHosts[0])
3030
XCTAssertEqual(urls[1].host, urlHosts[1])
@@ -38,8 +38,8 @@ class ArrayTests: XCTestCase {
3838

3939
var name: String?
4040

41-
init(dictionary: [String: AnyObject]) throws {
42-
try name <-- dictionary[Item.nameKey]
41+
init(dictionary: [String: AnyObject]) {
42+
name <-- dictionary[Item.nameKey]
4343
}
4444
}
4545

@@ -50,14 +50,14 @@ class ArrayTests: XCTestCase {
5050

5151
func testArrayToDeserializableArray() {
5252
var items = [Item]()
53-
try! items <-- dictionaries
53+
items <-- dictionaries
5454
XCTAssertEqual(items[0].name, "a")
5555
XCTAssertEqual(items[1].name, "b")
5656
}
5757

5858
func testArrayAsAnyToDeserializableArray() {
5959
var items = [Item]()
60-
try! items <-- (dictionaries as Any)
60+
items <-- (dictionaries as Any)
6161
XCTAssertEqual(items[0].name, "a")
6262
XCTAssertEqual(items[1].name, "b")
6363
}

0 commit comments

Comments
 (0)