@@ -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