How to use an enum and switch() with UITableViewController in Swift

后端 未结 3 978
刺人心
刺人心 2021-01-13 17:51

My UITableView has two sections, so I created an enum for them:

private enum TableSections {
    HorizontalSection,
    VerticalSection
}

H

相关标签:
3条回答
  • 2021-01-13 17:58

    Ok, I figured it out, thanks @tktsubota for pointing me in the right direction. I'm pretty new to Swift. I looked into .rawValue and made some changes:

    private enum TableSections: Int {
        case HorizontalSection = 0
        case VerticalSection = 1
    }
    
    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    
        switch section {
    
        case TableSections.HorizontalSection.rawValue:
            return firstArray.count
    
        case TableSections.VerticalSection.rawValue:
            return secondArray.count
    
        default 
            return 0
        }
    }
    
    0 讨论(0)
  • 2021-01-13 17:59

    In order to do this, you need to give your enum a type (Int in this case):

    private enum TableSection: Int {
        horizontalSection,
        verticalSection
    }
    

    This makes it so that 'horizontalSection' will be assigned the value 0 and 'verticalSection' will be assigned the value 1.

    Now in your numberOfRowsInSection method you need to use .rawValue on the enum properties in order to access their integer values:

    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    
        switch section {
    
        case TableSection.horizontalSection.rawValue:
            return firstArray.count
    
        case TableSection.verticalSection.rawValue:
            return secondArray.count
    
        default:
            return 0
        }
    }
    
    0 讨论(0)
  • 2021-01-13 18:18

    Jeff Lewis did it right, to elaborate on that and give the code litlle bit of more readiness -> my way of handling these things is to:

    1. Instantiate enum with the raw value -> section index

    guard let sectionType = TableSections(rawValue: section) else { return 0 }

    1. Use switch with section type

    switch sectionType { case .horizontalSection: return firstArray.count case .verticalSection: return secondArray.count }

    0 讨论(0)
提交回复
热议问题