私のアプリは、特定の場所に移動して、読み込む必要のあるWebサイトをプルダウンすることになっています。 2.3では魅力のように機能しましたが、xcodeを更新したので(これには多くの経験がありません)、エラー「タイプ 'Any'には添字メンバーがありません」と「json」を強調表示しています行3の直前
...Retriever = json["WEB"]...
これはそれに関連するコードです。
let json = try JSONSerialization.jsonObject(with: data!, options:.allowFragments)
if let Retriever = json["WEB"] as? [[String: AnyObject]] {
for website in Retriever {
if let name = website["URL"] as? String {
self.loadAddressURL(name)
小さなものが足りないように感じます。これを行うためのより良い方法があれば、私は提案が大好きです。 URLはこのJSONを返します
{
"WEB" : [
{
"URL" : "http://www.google.com"
}
]
}
しかし、私はそれを単純化することができればそれが大好き
{"URL":"http://www.google.com"}
これを試してください:
let json = try JSONSerialization.jsonObject(with: data!, options:.allowFragments) as! [String:AnyObject]
安全な方法:
do {
if let json = try JSONSerialization.jsonObject(with: data!, options:.allowFragments) as? [String:Any] {
print(json)
}
} catch let err{
print(err.localizedDescription)
}
タイプAny
をSwift辞書タイプ[String:AnyObject]
にキャストする必要があります。
編集:Swift 3
Swift 3では、AnyObject
の目的がより明確になりました。したがって、より好ましいSwift辞書タイプは[String:Any]
になります。
Any
は、任意のデータ型のエイリアスです。AnyObject
は、クラスから派生したデータ型のエイリアスです。
詳細情報については、https://craiggrummitt.com/2016/09/16/any-vs-anyobject-vs-nsobject-in-Swift-3/