Swift 3 个编译器错误 JSON 和 URLSession.shared.dataTask 中的字典
Swift 3 Compiler Errors with JSON and Dictionaries within URLSession.shared.dataTask
在此特定应用代码之前的问题 'solved' 的帮助下,此代码出现了一个新问题:
var properties: [String] = []
var unsortedDetails: [String] = []
var contacts: [[String]] = []
var propertySorting: [(key: String, ind: String, link: Bool)] = []
var autolinks: [Bool] = []
并且,在 viewDidLoad 函数中:
let contactsRequest = URLRequest(url: URL(string: "https://script.google.com/macros/s/AKfycbxOLElujQcy1-ZUer1KgEvK16gkTLUqYftApjNCM_IRTL3HSuDk/exec?id=" + ID + "&sheet=" + Industry.replacingOccurrences(of: " ", with: "+", options: NSString.CompareOptions.literal, range: nil))!)
let contactsTask = URLSession.shared.dataTask(with: contactsRequest as URLRequest)
{(data, response, error) in
do {
let jsonResult: Dictionary = try JSONSerialization.jsonObject(with: data!, options: []) as! [String : Any]
let results = jsonResult[self.Industry] as! [[String : Any]]
for key in results[0].keys {
self.propertySorting.append(key: (key as? String)!, ind: results[0].value(forKey: key as! String) as! String, link: results[1].value(forKey: key as! String) as! String != "X")
}
self.propertySorting.sort(by: {Int([=14=].ind) < Int(.ind)})
for property in self.propertySorting {
self.properties.append(property.key)
self.autolinks.append(property.link)
}
for contact in results {
self.contacts.append([])
for key in self.properties {
self.contacts[self.contacts.count-1].append(contact.value(forKey: key) as! String)
}
}
DispatchQueue.main.async(execute: {
let listController = self.viewControllers[0] as! ListController
listController.properties = self.properties
listController.contacts = self.contacts
listController.autolinks = self.autolinks
listController.tableView.reloadData()
})
} catch {
print("FATAL ERROR")
}
}
contactsTask.resume()
现在遇到的问题是:
Extra argument 'ind' in call
当 propertySorting.append(...) 被调用时,如果这个(以前工作的)ind
部分被删除,link
[=18= 返回相同的错误]
而不是 NSArray
和 NSDictionary
使用 Swift 原生 Array
和 Dictionary
并使用 keys
和 Dictionary
获取所有键的数组。
let jsonResult: Dictionary = try JSONSerialization.jsonObject(with: data!, options: []) as! [String : Any]
let results = jsonResult[self.Industry] as! [[String : Any]]
for key in results[0].keys {
}
注意: 无需对 Swift 本机类型对象使用 .mutableContainers
选项。
在此特定应用代码之前的问题 'solved' 的帮助下,此代码出现了一个新问题:
var properties: [String] = []
var unsortedDetails: [String] = []
var contacts: [[String]] = []
var propertySorting: [(key: String, ind: String, link: Bool)] = []
var autolinks: [Bool] = []
并且,在 viewDidLoad 函数中:
let contactsRequest = URLRequest(url: URL(string: "https://script.google.com/macros/s/AKfycbxOLElujQcy1-ZUer1KgEvK16gkTLUqYftApjNCM_IRTL3HSuDk/exec?id=" + ID + "&sheet=" + Industry.replacingOccurrences(of: " ", with: "+", options: NSString.CompareOptions.literal, range: nil))!)
let contactsTask = URLSession.shared.dataTask(with: contactsRequest as URLRequest)
{(data, response, error) in
do {
let jsonResult: Dictionary = try JSONSerialization.jsonObject(with: data!, options: []) as! [String : Any]
let results = jsonResult[self.Industry] as! [[String : Any]]
for key in results[0].keys {
self.propertySorting.append(key: (key as? String)!, ind: results[0].value(forKey: key as! String) as! String, link: results[1].value(forKey: key as! String) as! String != "X")
}
self.propertySorting.sort(by: {Int([=14=].ind) < Int(.ind)})
for property in self.propertySorting {
self.properties.append(property.key)
self.autolinks.append(property.link)
}
for contact in results {
self.contacts.append([])
for key in self.properties {
self.contacts[self.contacts.count-1].append(contact.value(forKey: key) as! String)
}
}
DispatchQueue.main.async(execute: {
let listController = self.viewControllers[0] as! ListController
listController.properties = self.properties
listController.contacts = self.contacts
listController.autolinks = self.autolinks
listController.tableView.reloadData()
})
} catch {
print("FATAL ERROR")
}
}
contactsTask.resume()
现在遇到的问题是:
Extra argument 'ind' in call
当 propertySorting.append(...) 被调用时,如果这个(以前工作的)ind
部分被删除,link
[=18= 返回相同的错误]
而不是 NSArray
和 NSDictionary
使用 Swift 原生 Array
和 Dictionary
并使用 keys
和 Dictionary
获取所有键的数组。
let jsonResult: Dictionary = try JSONSerialization.jsonObject(with: data!, options: []) as! [String : Any]
let results = jsonResult[self.Industry] as! [[String : Any]]
for key in results[0].keys {
}
注意: 无需对 Swift 本机类型对象使用 .mutableContainers
选项。