Shoyu
Shoyu is a library written in Swift to represent UITableView data structures.
Shoyu means Soy Sauce in Japanese.
Usage
Create single section and single row
Use createSection and createRow.
tableView.source = Source() { source in
    // Create section
    source.createSection { section in
        // Create row
        section.createRow { row in
            // Setting reuse identifier
            row.reuseIdentifier = "Cell"
            // Setting fixed height.
            row.height = 52
            // Configuring handler for cell.
            row.configureCell = { cell, _ in
                cell.textLabel?.text = "row 1"
            }
        }
    }
}
if ClassName and ReuseIdentifier specified in Storyboard are the same, you don't need to specify the reuseIdentifier.
Create rows for corresponds to the array
Use createRows.
let members = [
    Member(firstName: "Hamada", lastName: "Hiro"),
    Member(firstName: "Hamada", lastName: "Tadashi"),
    Member(firstName: "Tamago", lastName: "GoGo"),
    Member(firstName: "", lastName: "Wasabi"),
    Member(firstName: "Lemon", lastName: "Honey"),
    Member(firstName: "", lastName: "Fred"),
]
tableView.source = Source() { source in
    source.createSection { section in
        section.createRows(members) { member, row in
            row.height = 52
            row.configureCell = { cell, _ in
                cell.textLabel?.text = member.fullName
            }
        }
    }
}
Create section header and section footer
Use createHeader and createFooter.
tableView.source = Source() { source in
   source.createSection { section in
        // Create header.
        section.createHeader { header in
            // Setting title.
            header.title = "Big Hero 6"
            header.height = 22
            header.configureView = { view, _ in
                view.backgroundColor = UIColor.lightGrayColor()
            }
        }
        // Create footer.
        section.createFooter { footer in
          ...
        }
    }
}
Generics
Section and Row is compatible with generics.
Section
public class Section<HeaderType: UIView, FooterType: UIView>: SectionType {
  ...
}
Row
public class Row<CellType: UITableViewCell>: RowType {
  ...
}
cell in the arguments of configureCell is the type specified in the generics. Section header and section footer are also similar.
// Create generic row.
section.createRows(members) { (member, row: Row<MemberTableViewCell>) in
    row.configureCell = { cell, _ in
        // cell type is MemberTableViewCell.
        cell.nameLabel.text = member.fullName
    }
}
Row's delegate
Row has some delegate methods.
section.createRow { row in
    // Configuring handler for height.
    row.heightFor = { _ -> CGFloat? in
        return 52
    }
    // Configuring handler for cell.
    row.configureCell = { cell, _ in
        cell.textLabel?.text = "row"
    }
    // Event handler for when cell is selected.
    row.didSelect = { _ in
        print("row is selected.")
    }
}
Supported delegate methods
- configureCell
 - heightFor
 - canRemove
 - canMove
 - canMoveTo
 - didSelect
 - didDeselect
 - willDisplayCell
 - didEndDisplayCell
 - willRemove
 - didRemove
 
License
Shoyu is released under the MIT license. See LICENSE for details.