设置变量等于 if 语句条件
Posted
技术标签:
【中文标题】设置变量等于 if 语句条件【英文标题】:Setting variable equal to if statement condition 【发布时间】: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
强制转换为MKAnnotation
? thePin
是一个Bool
,表示数组是否包含该值。
我试图创建一个等于 pinArray 的 pin 的变量,该 pinArray 等于/具有与 restaurantName 相同的标题。
【参考方案1】:
contains(where:)
返回一个 Bool
指示是否找到匹配项。它不返回匹配的值。
所以thePin
是Bool
,然后您尝试将其强制转换为MKAnnotation
,这当然会崩溃。
如果您想要匹配值,请将代码更改为:
if let thePin = pinArray.first(where: $0.title == restaurantName )
do
mapp.selectionAnnotation(thePin, animated: true)
catch
else
// no match in the array
根本不需要contains
。无需转换(假设pinArray
是MKAnnotation
的数组)。
【讨论】:
我不得不问,你在几个项目中都帮助了我 - 谢谢,哈哈 - 但是你是怎么知道这么多的?另外,在 if let 语句中,“first”指的是第一个匹配 restaurantName 的元素? 是的,这是第一场比赛。请参阅first(where:) 的文档。我从 1979 年就开始编程了。以上是关于设置变量等于 if 语句条件的主要内容,如果未能解决你的问题,请参考以下文章