如何 return 从嵌套 json 对象

How to return object from nested json

我已经嵌套了 JSON,我正在尝试 return 一个对象并更新 UI。但是,我只能从 Result 数组访问属性,但无法访问 Step 来自 AnalyzedInstactions.

类 表示 JSON 中的数据。使用 https://app.quicktype.io

生成
import UIKit

    class ResultArray: Codable {
    var results = [Result]() 
} 
class Result: Codable, CustomStringConvertible {

    var title: String = ""
    var image = ""
    var readyInMinutes: Int? = 0
    var servings: Int? = 0
    var cuisines = [String]()
    var dishTypes = [String]()
    var diets = [String]()
    var occasions = [String]()
    var analyzedInstructions = [AnalyzedInstruction]()
    
    var description: String {
        return "\nResults - Name: \(title), Summary: \(String(describing: readyInMinutes ?? nil)), \(String(describing: servings ?? nil)) "
    }
}
// MARK: - Steps

class AnalyzedInstruction: Codable {
    var name: String? = ""
    var steps = [Step]()
}

class Step: Codable {
    var number: Int = 0
    var step: String = ""
}

这是我的解析方法

 private func parse(data: Data) -> [Result] {
        do {
            let decoder = JSONDecoder()
            let result = try decoder.decode(ResultArray.self, from: data)
            return result.results
        } catch {
            print("JSON Error: \(error)")
            return []
        }
    }

试试这个简单的代码来访问 AnalyzedInstructions 中的步骤:

            let results: [Result] = parse(data: theData)
            
            if let firstResult = results.first {
                if let firstAnaInst = firstResult.analyzedInstructions.first {
                    for step in firstAnaInst.steps {
                        print("--> step.step: \(step.step)   step.number: \(step.number)")
                    }
                } else { print(" NO analyzedInstructions") }
            } else { print(" NO results") }

如果您想要所有步骤:

            for result in results {
                for anaInst in result.analyzedInstructions {
                    for step in anaInst.steps {
                        print("--> step.step: \(step.step)   step.number: \(step.number)")
                    }
                }
            }

PS:如果合适,您可以考虑为您的 json 模型使用 struct 而不是 class