Search code examples
swiftif-statementvar

Setting variable equal to if statement condition


I have an if statement that checks to see if an array element matches a local variable.

 if pinArray.contains(where: {$0.title == restaurantName})

How would I create a variable of this element? I attempted

 let thePin = pinArray.contains(where: {$0.title == restaurantName}) 

but this comes with "could not cast boolean to MKAnnotation".

I also tried variations of

let pins = [pinArray.indexPath.row]
let pinn = pins(where: pin.title == restaurantName) (or close to it)

mapp.selectAnnotation(thePin as! MKAnnotation, animated: true)

to no avail. What basic step am I missing?

enter image description here


Solution

  • contains(where:) returns a Bool indicating whether a match was found or not. It does not return the matched value.

    So thePin is a Bool which you then attempt to force-cast to a MKAnnotation which of course crashes.

    If you want the matching value, change your code to:

    if let thePin = pinArray.first(where: { $0.title == restaurantName }) {
        do {
            mapp.selectionAnnotation(thePin, animated: true)
        } catch {
        }
    } else {
        // no match in the array
    }
    

    No need for contains at all. No need to cast (assuming pinArray is an array of MKAnnotation).