将数据输入到不同类中的不同结构

时间:2018-12-18 05:31:18

标签: ios swift struct

我已经在互联网上搜索了,但我仍然不知道如何在变量中插入值。我试图将一个值插入变量,以便我可以将其附加到数组中,然后将其放入tableviewcell中。

我了解单元格的工作原理,我只是想知道如何将数据插入此变量

这是我的结构体的代码

import Foundation
import UIKit

enum issueType: String {
 case major = "Major", blocker = "Blocker", minor = "Minor"
}

struct Issue {
var id: String
var tester: String
var type: issueType
var title: String
var appName: String
var desc: String
var date: Date
var bgColor: UIColor?

init(){
    id = ""
    tester = ""
    type = .minor
    title = ""
    appName = ""
    desc = ""
    date = Date()
    bgColor = UIColor.main()
}

init(item: [String:Any]){
    self.init()
    id = item["id"] as? String ?? ""
    tester = item["tester"] as? String ?? ""
    title = item["title"] as? String ?? ""
    appName = item["appName"] as? String ?? ""
    desc = item["desc"] as? String ?? ""

    if type == .major {
        bgColor = UIColor.main()
    }
    else if type == .blocker {
        bgColor = UIColor.blue
    }
    else {
        bgColor = UIColor.green
    }
}
}

这是来自不同类的superDidLoad中变量的代码

    override func viewDidLoad() {
    super.viewDidLoad()

    var issue1 = Issue(id: "id", tester: "tester", type: .minor, title: "title", appName: "appName", desc: "desc", date: Date())
    issue1.bgColor = UIColor.main()

    array.append(issue1)
}

2 个答案:

答案 0 :(得分:0)

您的UITableViewCell子类应具有类型Issue的某些变量

class YourSubclass: UITableViewCell {

    var issue: Issue?
    ...
}

然后在cellForRowAt的TableView数据源方法中,将单元格的变量分配为array中的元素,其索引等于indexPath.row

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    ...
    cell.issue = array[indexPath.row]
    ...
}

答案 1 :(得分:0)

在将自己的初始化程序添加到该结构之后,您丢失了默认的成员初始化程序。 为避免这种使用扩展名:

struct Issue {
    var id: String
    var tester: String
    var type: issueType
    var title: String
    var appName: String
    var desc: String
    var date: Date
    var bgColor: UIColor?
}

extension Issue {
    init(){
        id = ""
        tester = ""
        type = .minor
        title = ""
        appName = ""
        desc = ""
        date = Date()
        bgColor = UIColor.main()
    }

    init(item: [String:Any]){
        self.init()
        id = item["id"] as? String ?? ""
        tester = item["tester"] as? String ?? ""
        title = item["title"] as? String ?? ""
        appName = item["appName"] as? String ?? ""
        desc = item["desc"] as? String ?? ""

        if type == .major {
            bgColor = UIColor.main()
        }
        else if type == .blocker {
            bgColor = UIColor.blue
        }
        else {
            bgColor = UIColor.green
        }
    }
}

但是即使在这种情况下,您也必须默认使用初始化程序初始化所有属性,包括'bgColor'。

var issue1 = Issue(id: "id", tester: "tester", type: .minor, title: "title", appName: "appName", desc: "desc", date: Date(), bgColor: nil)