【问题标题】:Setting variable equal to if statement condition设置变量等于 if 语句条件
【发布时间】:2018-12-15 15:44:07
【问题描述】:

我有一个 if 语句,用于检查数组元素是否与局部变量匹配。

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

如何创建这个元素的变量? 我试过了

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

但这带有“无法将布尔值转换为 MKAnnotation”。

我也尝试了

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

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

无济于事。我缺少什么基本步骤?

【问题讨论】:

  • 如果你真的有if pinArray.contains(where: {$0.title == restaurantName}) { // some stuff }这样的代码,那么你绝对可以用let thePin = pinArray.contains(where: {$0.title == restaurantName})替换它,然后是if thePin { // some stuff }
  • 是否在更新中看到任何导致信号 sibart 的内容?
  • 请勿发布代码图片。以文本形式发布代码。
  • 您为什么要强制将Bool 强制转换为MKAnnotationthePin 是一个Bool,表示数组是否包含该值。
  • 我试图创建一个等于 pinArray 的 pin 的变量,该 pinArray 等于/具有与 restaurantName 相同的标题。

标签: swift if-statement var


【解决方案1】:

contains(where:) 返回一个 Bool 指示是否找到匹配项。它不返回匹配的值。

所以thePinBool,然后您尝试将其强制转换为MKAnnotation,这当然会崩溃。

如果您想要匹配值,请将代码更改为:

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

根本不需要contains。无需转换(假设pinArrayMKAnnotation 的数组)。

【讨论】:

  • 我不得不问,你在几个项目中都帮助了我 - 谢谢,哈哈 - 但是你是怎么知道这么多的?另外,在 if let 语句中,“first”指的是第一个匹配 restaurantName 的元素?
  • 是的,这是第一场比赛。请参阅first(where:) 的文档。我从 1979 年就开始编程了。
猜你喜欢
  • 1970-01-01
  • 2021-09-14
  • 1970-01-01
  • 2014-05-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-17
  • 1970-01-01
相关资源
最近更新 更多