Я использую Swift 4, AlamoFire и SwiftyJSON, чтобы использовать некоторые данные из API.
Я создал универсальную оболочку для AlamoFire
MyApiClass
func post(_ product: String = "", noun: String, verb: String, onCompletionHandler: @escaping (Bool, JSON) -> Void) {
Alamofire.request(url, method: .post, parameters: package, encoding: JSONEncoding.default).responseJSON {
response in
let json : JSON = JSON(response.result.value!)
if let r = json["APICall"]["Data"].dictionaryObject {
onCompletionHandler(true, JSON(r))
}
}
}
, которая отлично работает.Он получает данные и возвращает их мне.
Я пытаюсь показать эти результаты в виде таблицы, которую я получаю, когда использую функцию submitSearch()
чуть ниже этого фрагмента json
Значение JSON
{
"Results": {
"People": [
{
"Name": "John Smith",
"Address": "123 Main Str",
"Age": "47"
},
{
"Name": "Jane Smith",
"Address": "1234 E Main Str",
"Age": "27"
}
]
}
}
Моя функция поиска, которая загружает данные для UITableView
func submitSearch() {
MyApiClass().post(noun: "Get", verb: "People", data: data) { (isSuccessful, result) in
//This line loads all the array result from the People object in the above json
self.tableData = result["Results"]["People"].arrayValue
self.title? = "\(self.tableData.count) Found"
self.tableView.reloadData()
}
}
Моя проблема заключается в заполнении ячеек таблицы,Я продолжаю получать "Ambiguous reference to member 'subscript'"
и другие ошибки при попытке получить доступ к Словарю.
var tableData : Array<Any> = []
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath)
let person = tableData[indexPath.row] as! Dictionary
let name = person["Name"]
cell.textLabel?.text = "Name: \(String(describing: name))"
return cell
}
Во время tableView(_:cellForRowAt:)
я создаю person
объект и пытаюсь получить словарь, хранящийся в tableData по адресу indexPath.row
Я пытался
let person = tableData[indexPath.row] as! Dictionary
let person = tableData[indexPath.row] as? [String:String]
let person : Dictionary = tableData[indexPath.row]
и множество других.
Что я делаю не так?Как получить доступ к словарю в массиве?