@@ -25,55 +25,39 @@ extension APIRequest {
25
25
var errorRaised = false
26
26
if let data = answer. data {
27
27
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) {
38
29
CodyFire . shared. successResponseHandler ? ( self . host, self . endpoint)
39
- successCallback ? ( Nothing ( ) as! ResultType )
30
+ self . successCallback ? ( Nothing ( ) as! ResultType )
40
31
self . flattenSuccessHandler ? ( )
41
32
}
42
33
} 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) {
53
35
CodyFire . shared. successResponseHandler ? ( self . host, self . endpoint)
54
- successCallback ? ( data as! ResultType )
36
+ self . successCallback ? ( data as! ResultType )
55
37
self . flattenSuccessHandler ? ( )
56
38
}
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
+ }
57
50
} else {
58
51
do {
59
52
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) {
70
54
CodyFire . shared. successResponseHandler ? ( self . host, self . endpoint)
71
- successCallback ? ( decodedResult)
55
+ self . successCallback ? ( decodedResult)
72
56
self . flattenSuccessHandler ? ( )
73
57
}
74
58
} catch {
75
59
errorRaised = true
76
- print ( " decoding error: \( error) " )
60
+ log ( . error , " 🆘 JSON decoding error: \( error) " )
77
61
}
78
62
}
79
63
} else {
@@ -114,3 +98,14 @@ extension APIRequest {
114
98
}
115
99
}
116
100
}
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