Hi,
I am hoping somebody could tell me what I am doing wrong here, apologies if I get some simple things wrong, I’m a complete novice with xcode.
I have created a custom class, within this custom class I have created some variables and a method that uses Alamofire to call a webservice and return a JSON stream.
On my view controller, I declare a new instance of the class and call the alamofire method, the purpose of this method is to retrieve the JSON stream and elements to the class variables. I then want to access the class variables from my new instance.
This is where I am running in to my problem. The alamofire call is done with a switch statement (based on the guide found on codewithchris). If I set my variable to a static string, within the method but outside the scope of the alamofire switch, I can access the variable from my view controller and the expected value is available, however, if I set the variable to be a result from the JSON stream inside the switch statement, when I access the variable from my view controller, it is empty.
I have ensured the data is being correctly passed to the variable, it is being lost at some point and I am confident I have narrowed it down to an issue within the switch statement.
Any pointers much appreciated.
My Class:
import Foundation
import SwiftyJSON
import Alamofire
class PARTS {
//Class for dealing with Part data.
let part: String
var desc: String
var stockQty = 0
init(_ part: String) {
self.part = part
self.desc = ""
self.stockQty = 0
}
func getPartJSON() {
//Variable setting test
self.desc = "I have set the description manually"
//If I set the variable here, when I access it on my view controller, it works fine.
AF.request("myserverPath").responseJSON {
response in switch response.result {
case .success(let value):
//JSON Stream
let json = JSON(value)
debugPrint(json)
//Pull value from JSON
if let pinNumber = json[0, "partNumber"].string {
//Print in debug window
debugPrint(pinNumber)
debugPrint(json[0, "Part_Description"].string!)
}
let curStock = json[0, "TotalUsage"].intValue
self.stockQty = curStock
debugPrint(self.stockQty)
case .failure(let error):
print(error)
}
} //End of Alamofire request
}
}
My view controller function:
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
//var txtEntered:String? = ""
let txtEntered = self.serialInput.text
if txtEntered != nil {
//Create and intance of GPIN Class
let part: GPIN = GPIN(txtEntered!)
part.getGPINJSON()
let partDesc = part.desc
debugPrint(partDesc)
}
else {
debugPrint("No data entered ")
}
return true
}