この質問は以前に何度も尋ねられていましたが、私は自分のプロジェクトをSwift 3に移行しました。 JSONを解析して、私の特定の問題を解決する方法を理解できた答えを見つけることができませんでした。Swift 3エラー:タイプ 'Any'に下付きのメンバーはありません
guard let result = try JSONSerialization.jsonObject(with: data!, options: []) as? [String:AnyObject] else {
return
}
guard let responseData = result["Data"] else { return }
guard let userData = responseData["UserProfile"] else { return }
var userProfileFieldsDict = [String: String]()
if let sessionToken = userData!["CurrentSessionToken"] as? NSString {
userProfileFieldsDict["sessionToken"] = String(sessionToken)
}
}
if let sessionToken
ラインは、前述のエラーがスローされますが、あなたはスウィフト3でこれに対処することになっているか、非常にわかりませんか?誰か説明してベストプラクティス修正を提案できますか?
ありがとうございました!
Hmm、cool。しかし、Swift 2以降、どのように、なぜこの動作が変わったのですか? – ardevd
正直なところ、これはいつも問題であったはずです。レスポンスデータ["UserProfile"]をキャストしないと、すべてのコンパイラが知っているのは、それがAnyObjectだということです。コードを自分で実行することなく確実に言えるわけではありません。 – creeperspeak
最終的には、Swiftはオブジェクトの種類について実際に明示したいと思っています。したがって、ジェネリックスなどを使用していない限り、ガードステートメントのタイプを私が記述した方法でチェックするのは間違いなくベストプラクティスです。これはもう少しタイピングですが、この種のバグを避けるには価値があります。 – creeperspeak