【问题标题】:in swift, how to use a unique instance of a struct to implement a tableView?在swift中,如何使用结构的唯一实例来实现tableView?
【发布时间】:2020-09-15 10:04:20
【问题描述】:

我有这个结构的一个实例:

class AlimentObjectTronque {

    var aRetinol : Float = 0
    var aBetacarotene : Float = 0
    var vitamineC : Float = 0
    var vitamineB1 : Float = 0
    var calcium : Float = 0
    var omega3 : Float = 0

    
    init(aRetinol: Float, aBetacarotene: Float, vitamineC: Float, vitamineB1: Float, calcium: Float, omega3: Float) {
        
        self.aRetinol = aRetinol
        self.aBetacarotene = aBetacarotene
        self.vitamineC = vitamineC
        self.vitamineB1 = vitamineB1
        self.calcium = calcium
        self.omega3 = omega3
    }
    
    convenience init() {
        self.init(aRetinol: 0, aBetacarotene: 0, vitamineC: 0, vitamineB1: 0, calcium: 0, omega3: 0)
    }

}

我需要在 tableView 的每一行中放入该结构实例的属性。

        func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
            return // ????
        }
        
        func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
            guard let cell = tableView.dequeueReusableCell(withIdentifier: "CellFind", for: indexPath) as? AlimentToAddCell else {
                return UITableViewCell() }
            // ????
            
            return cell
        }

我需要知道如何在 tableview 的每一行中放入实例的属性。

【问题讨论】:

  • numberOfRowsInSection:返回 6,因为每个属性为 1。在cellForRowAt上,做一个switch indexPath.row {} ,根据它,把cell.textLabel.text设置成"\(myStruct.aRetinol)"或者对应的一个。
  • 所有这一切都是class而不是struct。它可以是一个结构体,并为您保存所有初始化代码(它会自动为您生成)。最后,你需要的只是这些对象的某种列表(数组、集合等)(刚刚意识到你说的是“属性”——仍然是一个有效的建议),以驱动你的 tableview。

标签: swift uitableview struct


【解决方案1】:

如果您想在表格视图中显示一个实例的属性,请使用静态单元格

  • 在 Interface Builder 中,在 table view 的 Attributes Inspector 的 Content 中选择 Static Cells

  • 将六个单元格拖入画布

  • 例如,在控制器中创建六个UILabel 出口并将它们分别连接到单元格的文本标签

    @IBOutlet var aRetinolLabel : UILabel!
    @IBOutlet var aBetacaroteneLabel : UILabel!
    ...
    
  • 使用结构而不是类并删除所有初始化器,您将免费获得成员初始化器

    struct AlimentObjectTronque {
        var aRetinol : Float
        var aBetacarotene : Float
        var vitamineC : Float
        var vitamineB1 : Float
        var calcium : Float
        var omega3 : Float
    }
    
  • 同时删除对UITableViewDataSourceUITableViewDelegate的一致性以及相关方法

  • 直接将值分配给标签。

    let alimentObject = AlimentObjectTronque(aRetinol: 2.0, aBetacarotene: 3.0...
    aRetinolLabel.text = String(alimentObject.aRetinol)
    aBetacarotene.text = String(alimentObject.aBetacarotene)
    ...
    

【讨论】:

  • 你能帮我解决重构的问题吗?这是链接link
  • 对不起,我也不懂这个问题。
  • 这里是它的链接link
猜你喜欢
  • 1970-01-01
  • 2023-03-22
  • 1970-01-01
  • 2016-02-18
  • 2016-09-28
  • 1970-01-01
  • 1970-01-01
  • 2021-02-09
  • 2019-04-01
相关资源
最近更新 更多