Я делаю приложение об использовании API на веб-сайте.Это приложение расписание поездов.И у меня возникли проблемы при отправке данных из одного ViewController в другой.Проблема заключается в том, что созданная мной глобальная переменная (trainNo) не передавалась другому VC при выполнении кода «self.trainNo.append (data2.intValue)» и «prepare (...)».Я использую оператор печати для отладки.Я обнаружил, что при нажатии кнопки сначала выполняется оператор print «print (self.trainNo)» из оператора запроса Alamofire, а затем «print (self.trainNo)» в запросе Alamofire.Я не знаю, почему это происходит.
Я пытался использовать оператор print в другом месте.
@IBAction func buttonPressed(_ sender: Any) {
APIUrl = "https://ptx.transportdata.tw/MOTC/v2/Rail/TRA/DailyTimetable/OD/"+"\(startStationNo)"+"/to/"+"\(endStationNo)"+"/"+"\(selectedDate)"+"?$top=30&$format=JSON&$orderby=OriginStopTime/ArrivalTime"
let request = setUpUrl(APIUrl: APIUrl)
print("\(APIUrl)")
Alamofire.request(request).responseJSON { response in
do{
let json: JSON = try JSON(data: response.data!)
if let result = json.array {
for data in result {
let data2 = data["DailyTrainInfo"]["TrainNo"]
self.trainNo.append(data2.intValue)
print(self.trainNo)
}
}
else{
print("ERROR in data2")
}
}
catch{
print("ERROR in json \(error)")
}
}
print(self.trainNo)
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.destination is TimeTableController {
let vc = segue.destination as? TimeTableController
vc?.trainNo = self.trainNo
print(self.trainNo)
}
}
Я ожидал, что значение trainNo будет изменено и передано другому VC.но это не сработало.
фактический результат:
[] // это «print (self.trainNo)» в кнопке
[] // thisодин из них «print (self.trainNo)» при подготовке
[101] ...... [101, 3147, 371, 3157, 3167, 1] // это «print» (self.trainNo) "цикл в Alamofire
, что означает, что запрос и цикл Alamofire выполняются после операторов печати, и я понятия не имею, что происходит.