Del Hinds Del Hinds - 6 months ago 12
Swift Question

Conditional Binding: if let error – Initializer for conditional binding must have Optional type

I am trying to delete a row from my Data Source and the following line of code:

if let tv = tableView {


causes the following error:


Initializer for conditional binding must have Optional type, not
UITableView


Here is the full code:

// Override to support editing the table view.
func tableView(tableView: UITableView, commitEditingStyle editingStyle:UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) {
if editingStyle == .Delete {

// Delete the row from the data source

if let tv = tableView {

myData.removeAtIndex(indexPath.row)

tv.deleteRowsAtIndexPaths([indexPath], withRowAnimation: .Fade)


How should I correct the following?

if let tv = tableView {

Answer

if let/if var optional binding only works when the result of the right side of the expression is an optional. If the result of the right side is not an optional, you can not use this optional binding. The point of this optional binding is to check for nil and only use the variable if it's non-nil.

In your case, the tableView parameter is declared as the non-optional type UITableView. It is guaranteed to never be nil. So optional binding here is unnecessary.

func tableView(tableView: UITableView, commitEditingStyle editingStyle:UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) {
    if editingStyle == .Delete {
        // Delete the row from the data source
        myData.removeAtIndex(indexPath.row)
        tableView.deleteRowsAtIndexPaths([indexPath], withRowAnimation: .Fade)

All we have to do is get rid of the if let and change any occurrences of tv within it to just tableView.

Comments