繁体   English   中英

如何过滤其他对象 swift

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM