Swift3.0におけるjsonパースについて
Swift2.2からSwift3.0にソースコードの移行を取り組んでいます。
JSONデータを取得して表示するアプリを作成しています。
for item in items as! NSArray {
上記の該当ソースコードでフィールドitemが複数要素となっていましてその複数要素を定数itemsとしてNSArrayにキャストして1要素を定数itemに取り出しています。以前のSwift2.2では正しく動作していたのですが、Swift3.0ではNSArrayにキャストがうまく動作せずに修正方法に苦慮しております。
アドバイスをいただけないでしょうか?
[Swift3.0に変換したソースコード]
var okashiList :[(maker:String, name:String, link:String, image:String)] = []
func searchOkashi(keyword : String){
let keyword_encode = keyword.addingPercentEncoding(withAllowedCharacters: CharacterSet.urlQueryAllowed)!
let session = URLSession(configuration: URLSessionConfiguration.default, delegate:nil, delegateQueue:OperationQueue.main)
let task = session.dataTask(with: URLRequest(url: Foundation.URL(string: "http://www.sysbird.jp/toriko/api/?apikey=guest&format=json&keyword=\(keyword_encode)&max=10&order=r")!), completionHandler: {
(data, response, error) in
do {
let json = try JSONSerialization.jsonObject(with: data!, options: .allowFragments) as! NSDictionary
if let items = json.object(forKey: "item") {
for item in items as! NSArray {
// コンパイルエラーが発生
guard let maker = item.object(forKey: "maker") else {
continue
}
// コンパイルエラーが発生
guard let name = item.object(forKey: "name") else {
continue
}
// コンパイルエラーが発生
guard let link = item.object(forKey: "url") else {
continue
}
// コンパイルエラーが発生
guard let image = item.object(forKey: "image") else {
continue
}
let data = (maker as! String,name as! String,link as! String,image as! String)
self.okashiList.append(data)
}
}
} catch {
// エラー
}
})
task.resume()
}