我需要连接基于某种逻辑的字符串,但我无法弄清楚如何做到这一点。基于不同值的Swift连接字符串
例子:query.filters = "location_id=4"
但是,如果我happend有两个或多个过滤器我的查询:
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=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:而不是字符串操作。这里有一些例子:http://stackoverflow.com/questions/39027558/how-to-combine-multiple-nullable-nspredicates,http://stackoverflow.com/questions/34202239/nspredicate-with-multiple-arguments-and -and行为。 –
@MartinR不,我使用这个:http://algolia.com/ – user2636197
请不要发布您的最终解决方案作为您的问题的编辑。如果你已经解决了你自己的问题(即使它不是解决问题的最佳方法),你应该将它作为答案发布,而不是编辑你的问题。 – rmaddy