如何在表视图中使用带有库的结构

How to use a struct with a library in a tableview

我创建了一个带有库的结构,并在另一个结构中初始化了该结构。现在我想在 Table 视图中使用生成的结构。但是,该结构目前无法正常工作。我试图找出原因,但似乎被卡住了。

问题似乎是库没有正确转换为结构。例如,当我对结构的一个实例进行计数时,使用以下代码:

var personalDetailsStructExtra: [PersonalDetailsStruct] = []
personalDetailsStructExtra.count 

它 returns 0,而它应该是 5(见下面的代码,字典中有 5 个条目):

struct PersonalDetailsStructLibrary {

let library = [
[
"title": "Country",
"icon": "country.pdf",
"questions": ["Belgium", "France", "Germany", "Netherlands", "Sweden", "UK", "USA"]
],
[
"title": "Age",
"icon": "age.pdf",
"questions": ["1", "2", "3", "4", "5", "6", "7"]
],
[
"title": "Gender",
"icon": "gender.pdf",
"questions": ["Male", "Female", "Other"]
],
[
"title": "Height",
"icon": "height.pdf",
"questions": ["1", "2", "3", "4", "5", "6", "7"]
],
[
"title": "Weight",
"icon": "weight.pdf",
"questions": ["1", "2", "3", "4", "5", "6", "7"]
],
]    }

struct PersonalDetailsStruct {
var title: String?
var icon: UIImage?
var questions: [String] = []

init(index: Int) {
    let personalDetailsStructLibrary = PersonalDetailsStructLibrary().library
    let personalDetailsDictionary = personalDetailsStructLibrary[index]

    title = personalDetailsDictionary["title"] as! String!

    let iconNamePD = personalDetailsDictionary["icon"] as! String!
    icon = UIImage(named: iconNamePD!)

    questions += personalDetailsDictionary["artists"] as! [String]
}    }

正如您在代码中看到的那样,我想在我的 table 视图中使用结构填充标签(标题)、图像(图标)和带有 UIPickerView(问题)的 UITextView。

因为它不起作用,我正在寻找:

答:有关如何使此代码在 table视图

中工作的反馈

B: 我是否应该使用另一种方法来填充我的 tableview

中的动态单元格

您必须初始化 personalDetailsStructExtra 数组,然后您才能看到所需的计数。

var personalDetailsStructExtra = [PersonalDetailsStruct]()

PersonalDetailsStructLibrary().library.count
let count = PersonalDetailsStructLibrary().library.count
for i in 0..<count {
    personalDetailsStructExtra.append(PersonalDetailsStruct(index: i))
}

personalDetailsStructExtra.count  // 5

更好的选择是使用库结构来构造和维护所有模型对象。

struct PersonalDetailDataSource {

    let library = [
        [
            "title": "Country",
            "icon": "country.pdf",
            "questions": ["Belgium", "France", "Germany", "Netherlands", "Sweden", "UK", "USA"]
        ],
        [
            "title": "Age",
            "icon": "age.pdf",
            "questions": ["1", "2", "3", "4", "5", "6", "7"]
        ],
        [
            "title": "Gender",
            "icon": "gender.pdf",
            "questions": ["Male", "Female", "Other"]
        ],
        [
            "title": "Height",
            "icon": "height.pdf",
            "questions": ["1", "2", "3", "4", "5", "6", "7"]
        ],
        [
            "title": "Weight",
            "icon": "weight.pdf",
            "questions": ["1", "2", "3", "4", "5", "6", "7"]
        ],
    ]

    var personalDetails = [PersonalDetail]()

    init() {
        loadData()
    }

    mutating private func loadData() {
        for i in 0..<library.count {

            let personalDetailsDictionary = library[i]
            let title = personalDetailsDictionary["title"] as! String!
            let iconName = personalDetailsDictionary["icon"] as! String!
            let questions = personalDetailsDictionary["questions"] as! [String]

            personalDetails.append(PersonalDetail(title: title, iconName: iconName, questions: questions))
        }
    }
}

struct PersonalDetail {
    var title: String?
    var icon: UIImage?
    var questions: [String] = []

    init(title: String, iconName: String, questions: [String]) {
        self.title = title
        if let icon = UIImage(named: iconName) {
            self.icon = icon
        }
        self.questions = questions
    }
}


PersonalDetailDataSource().personalDetails.count  // count: 5