web-dev-qa-db-ja.com

xcode 8 Swift 3に「Any」と入力すると、添え字メンバーがありません

私のアプリは、特定の場所に移動して、読み込む必要のある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"}
39
DaVinci1223

これを試してください:

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/

64
Bista