如何在tableview中使用带库的结构

时间:2015-11-21 18:29:34

标签: ios struct tableview

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

看起来问题是图书馆没有正确地翻译成结构。例如,当我使用以下代码对结构的实例进行计数时:

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

它返回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]
}    }

正如你在代码中看到的那样,我想在我的表格视图中使用struct来填充标签(title),图像(icon)和UITextView以及UIPickerView(问题)。

由于它不起作用,我正在寻找:

答:关于如何使这段代码在tableview中工作的反馈

B:我是否应该使用其他方法填充tableview中的动态单元格

1 个答案:

答案 0 :(得分:0)

您必须初始化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

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

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