下面的脚本在手机的两个模拟器上使用Swift 2都可以正常工作。更新到swift 3后,该脚本在模拟器上可以正常运行,但在为手机构建时会引发错误-下一行的下标使用不当-
let aObject = linkJSON[index] as! [String : AnyObject]
我努力将行更改为使用Any,但是该错误没有更改。
因此,完整的代码是-
class ViewController: UIViewController {
@IBOutlet weak var tableView: UITableView!
var orgs: [String] = []
var icon: [String] = []
var address1: [String] = []
var address2: [String] = []
var address3: [String] = []
var address4: [String] = []
var postcodes: [String] = []
var phone: [String] = []
var email: [String] = []
var website: [String] = []
override func viewDidLoad() {
super.viewDidLoad()
let url=URL(string:"http://webdata.net/service.php")
do {
let allLinksData = try Data(contentsOf: url!)
let allLinks = try JSONSerialization.jsonObject(with: allLinksData, options:.allowFragments) as! [String : AnyObject]
if let linkJSON = allLinks["organisations"] {
for index in 0...linkJSON.count-1 {
let aObject = linkJSON[index] as! [String : AnyObject]
orgs.append(aObject["org"] as! String)
icon.append(aObject["icon"] as! String)
address1.append(aObject["address1"] as! String)
address2.append(aObject["address2"] as! String)
address3.append(aObject["address3"] as! String)
address4.append(aObject["address4"] as! String)
postcodes.append(aObject["postcode"] as! String)
phone.append(aObject["phone"] as! String)
email.append(aObject["email"] as! String)
website.append(aObject["website"] as! String)
}
}
print(orgs)
self.tableView.reloadData()
}
catch {
}
}
可能是因为它是星期一,但是我在这里空白。
谢谢
弓帽
最佳答案
我建议你更换
if let linkJSON = allLinks["organisations"] {
与
if let linkJSON = allLinks["organisations"] as? [[String: AnyHashable]] {
然后,您无需强行解开
linkJSON[index]
,您可以执行let aObject = linkObject[index]
关于ios - JSONSerialization可与iOS模拟器一起使用,但在使用手机时出现错误“对下标的含糊使用”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41938039/