【问题标题】:how to filter other objects swift如何快速过滤其他对象
【发布时间】:2021-02-18 17:09:25
【问题描述】:

我在一个新项目中,我应该过滤此功能中的其他项目。特别是我必须过滤地址和城市

public var name: String
public var email: String
public var address: String?
public var shopName: String?
public var city: String?

就目前而言,我必须再次按地址和城市添加。这项工作

filteredRestaurants = restaurants?.filter{ (($0.shopName ?? $0.name).lowercased().contains(searchText.lowercased()) || $0.name.lowercased().contains(searchText.lowercased())) && (($0.getType() == ESERCENTE_TYPE.GDO && gdoOption!) ||
                ($0.getType() == ESERCENTE_TYPE.RISTORANTE && restaurantOption!)) }

但是如果我也添加了这个就不行

$0.address.lowercased().contains(searchText.lowercased())

更新:

试试这个,但它完全破坏了搜索。它甚至不再按名称过滤

filteredRestaurants = 餐馆?.filter{ (($0.shopName ?? $0.name).lowercased().contains(searchText.lowercased()) || $0.name.lowercased().contains(searchText.lowercased( ))) && (($0.getType() == ESERCENTE_TYPE.GDO && gdoOption!) || ($0.getType() == ESERCENTE_TYPE.RISTORANTE && restaurantOption!)) || (($0.address?.lowercased().contains(searchText.lowercased())) != nil)

【问题讨论】:

  • 但是如果我也添加这个没有这是什么意思?
  • @Sh_Khan 没有填写我并给我一个错误,说要插入“??默认值”但我不知道用什么代替默认值
  • 也许你应该用文字解释你想要达到的目标和/或一个例子。还要确保在过滤器代码中包含您正在使用的所有属性(或为清晰起见从过滤器代码中删除它们),例如getType
  • @JoakimDanielson 我正在尝试过滤对商店的搜索。如果我搜索商店名称,它会将我过滤掉。我必须添加通过地址进行搜索的可能性

标签: ios arrays swift


【解决方案1】:

首先,您的搜索无需小写。您可以使用localizedStandardContains 方法,该方法是变音符号且不区分大小写。其次,检查每个属性是否包含您的搜索要容易得多,如果为真,则为您的过滤器返回真。如果它们都没有成功,则返回 false:

filteredRestaurants = restaurants.filter { restaurant in
    if restaurant.name.localizedStandardContains(searchText) {
        return true
    }
    if restaurant.shopName?.localizedStandardContains(searchText) == true {
        return true
    }
    if restaurant.address?.localizedStandardContains(searchText) == true {
        return true
    }
    return false
}

【讨论】:

  • 不工作..这样无论我写什么研究都不会改变
猜你喜欢
  • 1970-01-01
  • 2021-07-15
  • 2020-12-14
  • 2017-04-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-21
  • 2011-10-21
相关资源
最近更新 更多