1 post tagged

enum

Перечисления

В свифте enum’ы почти как класы, они могут иметь свои методы и переменные. Enum очень удобно использовать для построения Table View в случае когда все ячейки известны зарание и меняться будут редко, например это может быть список настроек.

Допустим у нас в настройках будет три пункта:

enum Settings: Int {
    case FirstName
    case LastName
    case Age
}

Теперь для метода делегата numberOfRowsInSection необходимо указать количество ячеек и поскольку стандартным способом узнать количество кейсов в перечислении не получиться, а константы – лишняя зависимость, то прийдется сделать небольшой хак, добавим метод в enum:

static let count: Int = {
        var max: Int = 0
        while let _ = Settings(rawValue: max) { max += 1 }
        return max
    }()

Дальше добавим отображаемое имя в ячейке для каждого кейса:

var name: String {
        switch self {
        case .FirstName:
            return "First Name"
        case .Last Name:
            return  "Last Name"
        case .Age:
            return "Age"
        }
    }

И последнее, добавим метод для создания ячейки:

func cellForRowAtIndexPath(indexPath: NSIndexPath, tableView: UITableView) -> UITableViewCell {
        let cell = tableView.dequeueReusableCellWithIdentifier(name, forIndexPath: indexPath)
        cell.titleLabel.text = name
        return cell
    }

Теперь надо вызвать метод перечисления cellForRowAtIndexPath в методе делегата cellForRowAtIndexPath, для каждого кейса будет создана своя уникальная ячейка.
Что-бы добавить новую ячейку в таблицу нужно просто добавить новый кейс в перечисление и все. Еще этот способ удобен тем, что не нужно хардкодить константы индексов для конкретных ячеек, так как можно сделать Settings(rawValue: indexPath.row) и получить нужные значения.

2016   enum   Swift