[英]how to filter other objects swift
我在一个新项目中,我应该过滤这个 function 中的其他项目。 特别是我必须过滤地址和城市
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())
更新:
试试这个,但它完全破坏了搜索。 它甚至不再按名称过滤
filterRestaurants = 餐馆?.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)
首先,您的搜索无需小写。 您可以使用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
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.