【发布时间】:2016-10-21 14:19:04
【问题描述】:
我需要根据一些逻辑连接一个字符串,但我不知道该怎么做。
例子:
var filterString: String = ""
var hasFilter: Bool = false
if let catId = param["catid"] {
filterString += "cat_id=\(catId)"
hasFilter = true
}
if let subCatId = param["subcatid"] {
filterString += "sub_cat_id=\(subCatId)"
hasFilter = true
}
if let locationId = param["stateid"] {
filterString += "location_id=\(locationId)"
hasFilter = true
}
if hasFilter == true {
query.filters = filterString
}
这只有在我的查询中有 ONE 过滤器时才有效
例如:query.filters = "location_id=4"
但如果我碰巧有两个或更多过滤器,我的查询就会中断,例如:
query.filters = "location_id=4cat_id=3"
如果我有多个过滤器,我需要使用 AND 语句将其分隔,如下所示:
query.filters = "location_id=4 AND cat_id=3"
但我不知道该怎么做,因为我不知道过滤器会按什么顺序出现,或者是否会有一个或多个过滤器开始
编辑
我似乎可以通过:
var filterString: String = ""
var hasFilter: Bool = false
if let catId = param["catid"] {
filterString += "cat_id=\(catId)"
hasFilter = true
}
if let subCatId = param["subcatid"] {
if hasFilter == true {
filterString += " AND sub_cat_id=\(subCatId)"
} else {
filterString += "sub_cat_id=\(subCatId)"
}
hasFilter = true
}
if let locationId = param["stateid"] {
if hasFilter == true {
filterString += " AND location_id=\(locationId)"
} else {
filterString += "location_id=\(locationId)"
}
hasFilter = true
}
if hasFilter == true {
query.filters = filterString
}
【问题讨论】:
-
这是为了构建一个 NSPredicate 吗?在这种情况下,我强烈建议使用 NSCompoundPredicate 和 predicateWithFormat: 而不是字符串操作。以下是一些示例:stackoverflow.com/questions/39027558/…、stackoverflow.com/questions/34202239/…。
-
@MartinR 不,我正在使用这个:algolia.com
-
请不要发布您的最终解决方案作为对您问题的修改。如果您已经解决了自己的问题(即使它不是解决问题的最佳方法),您应该将其作为答案发布,而不是对您的问题进行编辑。