Silver Challenge Solution


#1

Does anyone have the solution to the silver challenge they can share? I’m hung up on it.


#2

If I remember correctly, the problem is in this last line:

// append each item in this row to our string for j in 0 ..< dataSource.numberOfColumns { let item = dataSource.itemForRow(i, column: j) let itemString = " \(item) |" let paddingAmount = columnWidths[j] - itemString.characters.count
because if itemString is longer than the column header, then the padding(amount:) function fails trying to execute an invalid loop. So columnWidths[j] needs to be the maximum width of any item in the column, not just of the header item.

[code] for (column, columnLabel) in columnLabels.enumerate() {
let columnHeader = " (columnLabel) |"
columnWidths.append(columnHeader.characters.count)

    // determine item with maximum width in column
    for row in 0 ..< dataSource.numberOfRows {
        let itemString = " \(dataSource.itemForRow(row, column: column)) |"
        columnWidths[column] = max(columnWidths[column], itemString.characters.count)
    }
    firstRow += padding(columnWidths[column] - columnHeader.characters.count) + "\(columnHeader)"
}
print(firstRow)

[/code]