私はGfycat APIへのネットワーク呼び出し後に保存したいデータを表すGfycat構造体を持っています。引数として:[任意の文字列] Gfycat構造体への拡張で 辞書からアクセスするときにAny型のオブジェクトをInt型に降格できません
typealias JSONDictionary = [String: Any]
struct Gfycat {
let id: String
let number: Int
}
は、私は種類の辞書を取るfailable初期化子を書きました。この辞書を使用して、構造体のプロパティに値を割り当てます。
extension Gfycat {
init?(dictionary: JSONDictionary) {
guard let id = dictionary["gfyId"] as? String,
let number = dictionary["gfyNumber"] as? Int { return nil }
self.id = id
self.number = number
}
}
問題が辞書から値にアクセスするとき、私はintに任意の値をダウンキャストすることができないということです。これは私が書いたオリジナルのinitメソッドです。最初にAnyをStringにダウンカストしてから、その文字列をIntに変換する必要があります。これはバグか、私が理解していないSwiftの機能ですか?私は最初のIntにその文字列を変換し、その後、Stringにどれをダウンキャストする必要があります
extension Gfycat {
init?(dictionary: JSONDictionary) {
guard let id = dictionary["gfyId"] as? String,
let uncastedNumber = dictionary["gfyNumber"] as? String,
let number = Int(uncastedNumber) else { return nil }
self.id = id
self.number = number
}
}
これは、辞書が文字列でキーされていて、値がintではなく文字列であることを意味します。 – rmaddy
JSONとは何ですか? JSONの文字列が数字(例えば1.0ではなく1.0)になっている場合、これは正しい動作です。その適切な文字列と数値への明示的な変換が必要です。 –