Ios URLSession.shared.dataTask中JSON和字典的Swift 3编译器错误
在帮助下“解决”了此特定应用程序代码的以前问题后,此代码出现了一个新问题:Ios URLSession.shared.dataTask中JSON和字典的Swift 3编译器错误,ios,swift,nsdictionary,swift3,Ios,Swift,Nsdictionary,Swift3,在帮助下“解决”了此特定应用程序代码的以前问题后,此代码出现了一个新问题: var properties: [String] = [] var unsortedDetails: [String] = [] var contacts: [[String]] = [] var propertySorting: [(key: String, ind: String, link: Bool)] = [] var autolinks: [Bool] = [] 并且,在viewDidLoad函数中: le
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($0.ind) < Int($1.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()
让contactsRequest=URLRequest(url:url(字符串):https://script.google.com/macros/s/AKfycbxOLElujQcy1-ZUer1KgEvK16gkTLUqYftApjNCM_IRTL3HSuDk/exec?id=“+ID+”&sheet=“+Industry.replacingOccurrences(of:”,with:“+”,选项:NSString.CompareOptions.literal,范围:nil))!)
让contactsTask=URLSession.shared.dataTask(其中:contactsRequest作为URLRequest)
{(数据、响应、错误)
做{
让jsonResult:Dictionary=try JSONSerialization.jsonObject(with:data!,options:[])作为![String:Any]
让results=jsonResult[self.Industry]作为![[String:Any]]
用于键入结果[0]。关键字{
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(按:{Int($0.ind)
现在遇到的问题是:
调用propertySorting.append(…)时,调用中的额外参数'ind',如果删除此(以前工作的)
ind
节,对于link
而不是NSArray
和NSDictionary
使用的Swift nativeArray
和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
选项。而不是NSArray
和NSDictionary
使用Swift原生数组和字典
并使用键和字典
获取所有键的数组
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 {
}
注意:无需将.mutableContainers
选项与Swift本机类型对象一起使用。jsonResult而不是Result,您获得了所有密钥原因是结果[0]您现在访问的不是NSDictionary类型。让我们这样定义Let result0:NSDictionary=results[0]代码>语法可能不正确,请将其更改为approvariate.jsonResult而不是Result,这样您就得到了所有密钥。原因是您现在访问的结果[0]不是NSDictionary的类型。让我们这样定义Let result0:NSDictionary=results[0]代码>语法可能不正确,请适当更改。这无疑会清理代码的外观,并且更有意义-但是它引入了两个新问题(同时似乎删除了其他问题):引入的第一个问题是,它声称我在这一行中输入了一个额外的值: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”)
尽管:var属性排序:[(key:String,ind:String,link:Bool)]
(之前工作正常)它还声称contact
没有值value
对不起,我所说的“额外价值”是指它声称propertySorting
中没有值ind
,如果我删除了该行中的该部分(尽管它是正确的),然后,它为链接
@OscarCooke Abbott声明了相同的内容,您需要向我显示属性排序的类型
,并显示此自定义方法,更具体地说,对于联系人
没有值值
,它说'Value of type'Dictionary'没有成员'Value'。你需要用这个新代码和错误编辑你的问题。这肯定会清理代码的外观,并且更有意义-但是它引入了两个新问题(同时似乎删除了其他问题):引入的第一个问题是,它声称我在此行中输入了一个额外的值: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”)
尽管:var-propertySorting:[(key:String,ind:String,link:Bool)]=[]
(之前工作正常)它还声称contact
没有值value
对不起,“额外值”是指它声称propertySorting
中没有值ind
,如果我删除了该部分(尽管它是正确的)在这一行中,它接着为link
@OscarCooke-Abbott声明了同样的内容,因为您需要向我显示属性排序的类型
,并且还显示此自定义方法。更具体地说,对于联系人
没有值值
,它说'value of type'Dictionary'没有成员'value',您需要编辑y我们的问题与这个新的代码和错误。