首页 > 解决方案 > 在swift中,如何使用结构的唯一实例来实现tableView?

问题描述

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

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
        }

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

标签: swiftuitableviewstruct

解决方案


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

  • 在 Interface Builder 中,选择Static Cellstable view 的 Attributes Inspector 的 Content。

  • 将六个单元格拖入画布

  • 在控制器中创建六个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)
    ...
    

推荐阅读