如何通过一个或多个标志过滤一组自定义对象?
let flags = ["New product", "Season 2014", "Season 2015", "Product available"]
使用一个标志或多个静态标志很容易:
let filteredArray = myCustomObjectsArray.filter() { $0.isNew == true }
let filteredArray = myCustomObjectsArray.filter() { $0.isNew == true && $0.season.rangeOfString("14") && $0.season.rangeOfString("15") && $0.isAvailable }
但是,如果标志是动态的,即标志数组是通过用户点击表格视图的单元格创建的,该怎么办?
另一个问题是尝试在“filter() {condition1 && condition2 etc.}”中连接多个条件时出现错误。 “表达式太复杂,无法在合理的时间内解决......”。
因此,标志数组是用户选择的(只是表格视图单元格中的标题)。例如,如果标志数组是[“新产品”,“2015 年季节”],我想按 .isNew 和 .season.rangeOfString(“15”) 进行过滤。所以我按属性排序,而不是按字符串排序。
您还没有发布所有必要的代码,在哪里.isNew
and .season
来自?它看起来像是自定义对象。
您提到的错误(“表达式太复杂,无法在合理的时间内解决”)已经有答案:
如果条件因表达式过于复杂而失败 https://stackoverflow.com/questions/26550775/if-condition-failing-with-expression-too-complex
话虽如此,您应该能够通过将表达式的每个部分分成单独的语句来解决此问题:
let filteredArray = myCustomObjectsArray.filter() {
let isNew = $0.isNew == true
let is14 = $0.season.rangeOfString("14")
let is15 = $0.season.rangeOfString("15")
let isAvailable = $0.isAvailable
return isNew && is14 && is15 && isAvailable
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)