Skip to content

Commit 455bfb0

Browse files
committed
Implement plain String response decoding
1 parent b0cba58 commit 455bfb0

File tree

2 files changed

+30
-35
lines changed

2 files changed

+30
-35
lines changed

CodyFire.podspec

+1-1
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88

99
Pod::Spec.new do |s|
1010
s.name = 'CodyFire'
11-
s.version = '1.8.4'
11+
s.version = '1.9.0'
1212
s.summary = '❤️ Powerful codable API requests builder and manager for iOS based on Alamofire'
1313

1414
# This description is used to generate tags and improve search results.

CodyFire/Classes/APIRequest+ParseResponse.swift

+29-34
Original file line numberDiff line numberDiff line change
@@ -25,55 +25,39 @@ extension APIRequest {
2525
var errorRaised = false
2626
if let data = answer.data {
2727
if ResultType.self is Nothing.Type {
28-
if diff > 0 {
29-
DispatchQueue.global(qos: DispatchQoS.QoSClass.userInteractive).async {
30-
Thread.sleep(forTimeInterval: diff)
31-
DispatchQueue.main.async {
32-
CodyFire.shared.successResponseHandler?(self.host, self.endpoint)
33-
self.successCallback?(Nothing() as! ResultType)
34-
self.flattenSuccessHandler?()
35-
}
36-
}
37-
} else {
28+
delayedResponse(diff) {
3829
CodyFire.shared.successResponseHandler?(self.host, self.endpoint)
39-
successCallback?(Nothing() as! ResultType)
30+
self.successCallback?(Nothing() as! ResultType)
4031
self.flattenSuccessHandler?()
4132
}
4233
} else if ResultType.self is Data.Type {
43-
if diff > 0 {
44-
DispatchQueue.global(qos: DispatchQoS.QoSClass.userInteractive).async {
45-
Thread.sleep(forTimeInterval: diff)
46-
DispatchQueue.main.async {
47-
CodyFire.shared.successResponseHandler?(self.host, self.endpoint)
48-
self.successCallback?(data as! ResultType)
49-
self.flattenSuccessHandler?()
50-
}
51-
}
52-
} else {
34+
delayedResponse(diff) {
5335
CodyFire.shared.successResponseHandler?(self.host, self.endpoint)
54-
successCallback?(data as! ResultType)
36+
self.successCallback?(data as! ResultType)
5537
self.flattenSuccessHandler?()
5638
}
39+
} else if ResultType.self is String.Type {
40+
if let string = String(data: data, encoding: .utf8) {
41+
delayedResponse(diff) {
42+
CodyFire.shared.successResponseHandler?(self.host, self.endpoint)
43+
self.successCallback?(string as! ResultType)
44+
self.flattenSuccessHandler?()
45+
}
46+
} else {
47+
errorRaised = true
48+
log(.error, "🆘 Unable to decode response as string")
49+
}
5750
} else {
5851
do {
5952
let decodedResult = try decoder.decode(ResultType.self, from: data)
60-
if diff > 0 {
61-
DispatchQueue.global(qos: DispatchQoS.QoSClass.userInteractive).async {
62-
Thread.sleep(forTimeInterval: diff)
63-
DispatchQueue.main.async {
64-
CodyFire.shared.successResponseHandler?(self.host, self.endpoint)
65-
self.successCallback?(decodedResult)
66-
self.flattenSuccessHandler?()
67-
}
68-
}
69-
} else {
53+
delayedResponse(diff) {
7054
CodyFire.shared.successResponseHandler?(self.host, self.endpoint)
71-
successCallback?(decodedResult)
55+
self.successCallback?(decodedResult)
7256
self.flattenSuccessHandler?()
7357
}
7458
} catch {
7559
errorRaised = true
76-
print("decoding error: \(error)")
60+
log(.error, "🆘 JSON decoding error: \(error)")
7761
}
7862
}
7963
} else {
@@ -114,3 +98,14 @@ extension APIRequest {
11498
}
11599
}
116100
}
101+
102+
fileprivate func delayedResponse(_ diff: TimeInterval, callback: @escaping ()->()) {
103+
guard diff > 0 else {
104+
callback()
105+
return
106+
}
107+
DispatchQueue.global(qos: DispatchQoS.QoSClass.userInteractive).async {
108+
Thread.sleep(forTimeInterval: diff)
109+
DispatchQueue.main.async(execute: callback)
110+
}
111+
}

0 commit comments

Comments
 (0)