JSONデータを解析し、指定された条件を満たす配列にそれらのオブジェクトのみを追加しようとしています。現時点では、APIからすべてのオブジェクトをフェッチして配列に追加するコードをコメントアウトしています。ただし、「license_author」キーの「wger.de」値を持つオブジェクトのみを追加するように制限したいと思います。
ただし、オンラインでエラーが発生します。
if eachExercise["license_author"] == "wger.de"
二項演算子 '=='は、タイプ 'Any?'のオペランドには適用できません。および「文字列」。ただし、APIから文字列と整数の両方のデータをフェッチしたいので、それでもAnyオブジェクトとして保持したいと思います。
これは私のparseData()関数のコードです:
func parseData() {
fetchedExercise = []
let urlPath = "https://wger.de/api/v2/exercise/?format=json&language=2&status=2"
let url = URL(string: urlPath)!
let task = URLSession.shared.dataTask(with: url) { (data, response, error) in
if error != nil {
print("Error while parsing JSON")
}
else {
do {
if let data = data,
let fetchedData = try JSONSerialization.jsonObject(with: data, options: .mutableLeaves) as? [String:Any],
let exercises = fetchedData["results"] as? [[String: Any]] {
// WORKING CODE
/*
for eachExercise in exercises
{
let name = eachExercise["name"] as! String
let description = eachExercise["description"] as! String
self.fetchedExercise.append(Exercise(name: name, description: description))
}
*/
// TESTING
for eachExercise in exercises {
if eachExercise["license_author"] == "wger.de" {
let name = eachExercise["name"] as! String
let description = eachExercise["description"] as! String
let id = eachExercise["id"] as! Int
self.fetchedExercise.append(Exercise(name: name, description: description))
}
}
DispatchQueue.main.async {
self.tableView.reloadData()
}
}
}
catch {
print("Error while parsing data.")
}
}
}
task.resume()
}
where
条項とオプションのダウンキャストAny
を使用してString
for eachExercise in exercises where eachExercise["license_author"] as? String == "wger.de" { ...
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加