Object 如果找不到结果,过滤器会崩溃

Object filter crashes if no results can be found

我已经编写了一些代码来从自定义 object 数组中查找用户的收藏夹。它工作得很好,除非 object 不存在,在这种情况下它只会崩溃。我正在考虑以不同的方式完全重写代码,但我想可能有一种方法可以修复它......我只是不知道如何。

这是我的代码:

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCellWithIdentifier("rideCell", forIndexPath: indexPath) as! RideCell

    var ride = DataManager.sharedInstance.getRideByName(favouritesArray[indexPath.row] as! String)

    if ride != nil {
        cell.rideNameLabel.text = ride!.name

        var dateFormat = NSDateFormatter()
        dateFormat.dateFormat = "h:mm a"
        cell.updatedLabel.text = dateFormat.stringFromDate(ride!.updated!)

        if ride!.waitTime! == "Closed" {
            cell.waitTimeLabel.text = ride!.waitTime!
        } else {
            cell.waitTimeLabel.text = "\(ride!.waitTime!)m"
        }
    }

    return cell
}

func getRideByName(name: String) -> Ride? {
    let result = self.rideArray.filter({
        [=11=].name == name
    })
    return result[0]
}

就像我说的,如果可以找到 favouritesArray 中的字符串,它就可以正常工作,但是如果找不到,它就会崩溃。

任何人都可以建议我可以做哪些更改来阻止崩溃,并将其变为 return 零吗?

谢谢!

您需要检查 result 的长度 - 您可以通过替换

来实现
return result[0]

return result.count == 0 ? nil : result[0]

您可以在过滤后的数组上使用 first 属性:

return result.first

其中 returns 可选。不过,更好的选择是使用 indexOf() 函数(如果您在 Swift 2 中),因为它不会构建整个数组,并且会停止查看 rideArray 的其余部分一次它会找到您要查找的内容:

return self.rideArray.indexOf { [=11=].name == name }.map { self.rideArray[[=11=]] }