JSONSerialization 适用于 iOS 模拟器,但在使用电话时出现错误“不明确地使用 '下标'
Posted
技术标签:
【中文标题】JSONSerialization 适用于 iOS 模拟器,但在使用电话时出现错误“不明确地使用 \'下标\'【英文标题】:JSONSerialization works with iOS simulator but has error 'Ambiguous use of 'subscript' when using phoneJSONSerialization 适用于 iOS 模拟器,但在使用电话时出现错误“不明确地使用 '下标' 【发布时间】:2017-01-30 14:14:26 【问题描述】:以下脚本在手机上的两个模拟器上使用 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
可能是因为是星期一,但我这里有一个空白。
谢谢
弓帽
【问题讨论】:
您可以将[String : AnyObject]
替换为NSDictionary
。
在 Swift 3 中,正确的 JSON 格式是 [String:Any]
,另外你需要简单地将 linkJSON
的类型指定为字典数组 if let linkJSON = allLinks["organisations"] as? [[String:Any]]
这是真正的网址吗?我尝试构建您的代码,但收到错误 The data couldn’t be read because it isn’t in the correct format.
@PiyushRathi NSDictionary
让事情变得更糟。
Russell,它是一个被屏蔽的 URL,我在发帖前忘记清除屏蔽了。道歉。
【参考方案1】:
我建议你更换
if let linkJSON = allLinks["organisations"]
与
if let linkJSON = allLinks["organisations"] as? [[String: AnyHashable]]
那么你不需要强制解开linkJSON[index]
,你可以这样做
let aObject = linkObject[index]
【讨论】:
马克,非常感谢。我刚刚添加为? NSArray 到同一行,并取得了效果。再次感谢您的及时协助。 :-)as? NSArray
不要那样做。使用 Swift 数组和字典而不是 NSArray 和 NSDictionary。以上是关于JSONSerialization 适用于 iOS 模拟器,但在使用电话时出现错误“不明确地使用 '下标'的主要内容,如果未能解决你的问题,请参考以下文章
JSONSerialization 没有在服务器发送时序列化数据
为啥 NSRegularExpression 不包含在适用于 Mac 应用程序的foundtion.framework 中,因为它适用于 iOS?
适用于 Cordova 的 Visual Studio 工具 - 适用于 iOS 的 RemoteBuild 失败
使用适用于 iOS 10 的 UNUserNotificationCenter
在使用适用于 iOS 的 Google Maps SDK 和适用于 iOS 的 Google Places 时,我找不到在哪里可以获得 POI 结果