首页 > 解决方案 > 在swift 5中从结构中获取一个变量

问题描述

在 swift 5 中从 struct 中获取一个变量:

我想 EResults从 GetSystemCats 内部获取!

我想把它放在数组中


struct GetSystemCats {
    var responseCode: Int?
    var message: String?
    var status: Bool?
    var results: [EResults]

    public init(response: [String: Any]) {
        self.responseCode = response["responseCode"] as? Int
        self.message = response["message"] as? String
        self.status = response["status"] as? Bool
        let results = response["results"] as! [[String: Any]]
        self.results = []
        for item in results {
            let result = EResults(result: item)
            self.results.append(result)
        }
    }
}

struct EResults {

    var title: String?
    var id: Int?
    var sub_category: [Category]


    public init(result: [String: Any]) {

        self.title = result["title"] as? String
        self.id = result["id"] as? Int
        let sub_category = result["sub_category"] as! [[String: Any]]
        self.sub_category = []
        for item in sub_category {
            let result = Category(response: item)
            self.sub_category.append(result)
        }



    }
}



struct Category {
    var title: String?
    var id: Int?

      public init(response: [String: Any]) {
        self.title = response["title"] as? String
        self.id = response["id"] as? Int

    }

}

我用它titleCategory表格视图中显示

请帮我!!

标签: iosswiftalamofire

解决方案


为了让每个人都Category知道它所属的 ,只需将它传递给初始化器:.titleEResults

struct EResults {

    var title: String?
    var id: Int?
    var sub_category: [Category]


    public init(result: [String: Any]) {

        self.title = result["title"] as? String
        self.id = result["id"] as? Int
        let sub_category = result["sub_category"] as! [[String: Any]]
        self.sub_category = []
        for item in sub_category {
            let result = Category(response: item, in: self)
            self.sub_category.append(result)
        }
    }
}

struct Category {
    var eresultTitle: String?
    var title: String?
    var id: Int?

      public init(response: [String: Any], in eResult: EResults) {
        self.eresultTitle = eResult.title
        self.title = response["title"] as? String
        self.id = response["id"] as? Int
    }
}

注意:作为一般建议,我完全建议您研究一下,Codable因为它可以让您摆脱所有这些可选变量 - 通常首选不可变结构,并且可以为您节省大量解包和提供默认值的需要(例如丑陋的代码,如thing.label.text = category?.title ?? "unknown") . 不过,您要求Categorys 知道.title它的父母EResult会有点尴尬。


推荐阅读