Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/facebook/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JSONSerialization与iOS模拟器配合使用,但存在错误';使用';下标';使用手机时_Ios_Json_Swift3 - Fatal编程技术网

JSONSerialization与iOS模拟器配合使用,但存在错误';使用';下标';使用手机时

JSONSerialization与iOS模拟器配合使用,但存在错误';使用';下标';使用手机时,ios,json,swift3,Ios,Json,Swift3,下面的脚本在手机上的两个模拟器上都使用Swift 2运行良好。升级到swift 3后,该脚本在模拟器上运行良好,但在为手机构建时抛出了一个错误——下标在下面的行中使用不明确- let aObject = linkJSON[index] as! [String : AnyObject] 我已尝试将该行更改为使用Any,但是错误没有更改 因此,完整代码如下所示- class ViewController: UIViewController { @IBOutlet weak var tab

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

这样,您就不需要强制展开
linkJSON[index]
,只需执行以下操作即可

let aObject = linkObject[index]

您可以将
[String:AnyObject]
替换为
NSDictionary
。在Swift 3中,正确的JSON格式是
[String:Any]
,如果让linkJSON=allLinks[“Organizations”]作为,您还需要简单地将
linkJSON
的类型指定为Dictionary
的数组?[[String:Any]]{
这是真实的url吗?我尝试构建你的代码,但我得到一个错误
数据无法读取,因为它的格式不正确。
@PiyushRathi
NSDictionary
使情况更糟。Russell,这是一个被屏蔽的url,我在发布之前忘记清除屏蔽。抱歉。马克,非常感谢。我刚刚添加了as?NS数组到同一行,并获得了结果。再次感谢您的提示帮助。:-
as?NSArray
不要这样做。使用Swift数组和字典,而不是NSArray和NSDictionary。
let aObject = linkObject[index]