Прежде всего, значение для ключа id
является целым числом, а не строкой, обратите внимание на пропущенные двойные кавычки.
Во-вторых, viewDidLoad
проверьте, сохранены ли уже данные, и извлеките ихтолько если это не так.
override func viewDidLoad() {
super.viewDidLoad()
guard let tabledata = UserDefaults.standard.array(forKey: "id") as? [Int] else {
fetchData()
return
}
print("table:\(tabledata)")
}
Проблема возникает из-за того, что вы перезаписываете значение в UserDefaults
внутри цикла при сохранении значения всегда для одного и того же ключа.
Создайтевременный массив и сохраните массив один раз после цикла
func fetchData(){
Alamofire.request("https://jsonplaceholder.typicode.com/users", encoding: URLEncoding.default).responseJSON {
response in
switch response.result {
case .success(let value):
let json = JSON(value)
print(json)
var idArray = [Int]()
for item in json.array!{
let address = item["address"]["city"].string
let id = item["id"].intValue
idArray.append(id)
let userName = item["username"].string
}
UserDefaults.standard.set(idArray, forKey: "id")
print("table:\(idArray)")
case .failure(let error):
print(error)
}
}
}
В Swift 4+ настоятельно рекомендуется удалить SwiftyJSON
и любую другую стороннюю библиотеку JSON для анализа в пользуCodable
протокол.