Я пытаюсь сохранить данные об "авторе" в глобальную переменную с именем "авторы" из json (ссылка: "https://learnappmaking.com/ex/books.json") с этими двумя библиотеками. Но это работает только при завершающем закрытии func Alamofire.request(url).responseJSON
. Когда Я получаю доступ к глобальной переменной с именем «авторы» откуда-то, кроме замыкающего замыкания, получаю пустой массив строк.
Может ли кто-нибудь объяснить причину этой странной ситуации?
Большое спасибо.
class ViewController: UIViewController {
var authors = [String]()
let url = "https://learnappmaking.com/ex/books.json"
func getAuthorsCount() {
print("the number of authors : \(authors.count)") // I hope that here, the number of authors should be 3 too! actually, it is 0. Why?
// this for loop doesn't get excuted
for author in authors {
print(author)
}
}
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
Alamofire.request(url).responseJSON { response in
if let data = response.data {
if let json = try? JSON(data: data) {
for item in json["books"].arrayValue {
var outputString: String
print(item["author"])
outputString = item["author"].stringValue
//urlOfProjectAsset.append(outputString)
self.authors.append(outputString)
print("authors.count: \(self.authors.count)")
}
}
}
}
getAuthorsCount()
print("-------------")
}
}
фактический вывод:
Обновление :
Я изменил свой код:
class ViewController: UIViewController {
var authors = [String]()
let url = "https://learnappmaking.com/ex/books.json"
func getAuthorsCount() {
print("the number of authors : \(authors.count)")
// this for loop doesn't get excuted
for author in authors {
print(author)
}
}
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
Alamofire.request(url).responseJSON { response in
if let data = response.data {
if let json = try? JSON(data: data) {
for item in json["books"].arrayValue {
var outputString: String
//print(item["author"])
outputString = item["author"].stringValue
//urlOfProjectAsset.append(outputString)
self.authors.append(outputString)
//print("authors.count: \(self.authors.count)")
}
self.getAuthorsCount() // I added this line of code.
}
}
}
getAuthorsCount()
print("-------------")
}
}
Но почему func getAuthorsCount()
(не self. Version) по-прежнему печатает пустой массив строк? Я думаю, что результат должен быть таким же, как результат, который
func self.getAuthorsCount()
напечатано.
Я так растерялся сейчас ...
Опять же, я хочу использовать данные, хранящиеся в переменной с именем «авторы», но я получил только пустой массив строк.