ios - JSONSerialization可与iOS模拟器一起使用,但在使用手机时出现错误“对下标的含糊使用”

标签 ios json swift3

下面的脚本在手机的两个模拟器上使用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/

相关文章:

json - 如何在齐柏林飞艇中添加一个 jar ?

php - 如何将json带来的id从ajax发送到php帖子

javascript - 循环 JSON 对象并绘图到 map

ios - 保留读取的推送通知

objective-c - 有时不调用 NSUbiquitousKeyValueStoreDidChangeExternallyNotification

swift - 用 * 屏蔽名字和姓氏字符串

ios - 使用 UIView.transition() 方法的幻灯片过渡

swift3 - swift 3 日期选择器仅显示日月年

ios - 代号 1 iOS 上的 Unicode/emoji

ios - 可扩展 TableVIew 的示例项目