                 var manualReloads = [IndexPath]()
                 for indexPath in weakSelf.tableView.indexPathsForVisibleRows ?? [] {
                     if let updateableCell = weakSelf.tableView.cellForRow(at: indexPath) as? UpdateableTableViewCell {
-                        let item: ComparableItem = weakSelf.sections[(indexPath as NSIndexPath).section].items[(indexPath as NSIndexPath).row]
+                        let item: ComparableItem = weakSelf.sections[indexPath.section].items[indexPath.row]
                         updateableCell.updateCellWithItem(item, animated: false)
                     } else {
                         manualReloads.append(indexPath)

    // MARK: Row
    
    public func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
        if let learnedHeight = learnedCellHeights[(indexPath as NSIndexPath).section, (indexPath as NSIndexPath).row] {
            return learnedHeight
        } else {
            return UITableViewAutomaticDimension

    
    
    public func tableView(_ tableView: UITableView, estimatedHeightForRowAt indexPath: IndexPath) -> CGFloat {
        return estimatedCellHeights[indexPath.section, indexPath.row] ?? tableView.estimatedRowHeight
    }
    
    
    public func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {
        estimatedCellHeights[indexPath.section, indexPath.row] = cell.bounds.height
        learnedCellHeights[indexPath.section, indexPath.row] = cell.bounds.height
    }
    
    
