0
я бы интересен, если есть какой-либо кратчайший способ установить значение colorPredicateбыстры установленное значение с переключателем получила ошибку: ожидаемая начальное значение после «=»
перечисления Color { случая черного корпус белого }
func predicateForColor(color: Color, compoundWith compoundPredicate: NSPredicate?) -> NSPredicate {
// NOTE: if I use the code bellow to set the value of colorPredicate, will got error: expected initial value after '='.
// let colorPredicate =
// switch color {
// case .black: return predicateForBlack()
// case .white: return predicateForWhite()
// }
func getPredicateByColor(color: Color) -> NSPredicate {
switch color {
case .black: return predicateForBlack()
case .white: return predicateForWhite()
}
}
let colorPredicate = getPredicateByColor(color: color)
if let predicate = compoundPredicate {
return NSCompoundPredicate(andPredicateWithSubpredicates: [predicate, colorPredicate])
} else {
return colorPredicate
}
}
func predicateForBlack() -> NSPredicate {
print("get black predicate")
return NSPredicate(format: "color = black")
}
func predicateForWhite() -> NSPredicate {
print("get white predicate")
return NSPredicate(format: "color = white & someother condition")
}
print(predicateForColor(color: .black, compoundWith: nil))
Да, это работает! Спасибо за быстрый ответ. Но все еще удивляйтесь, почему прокомментированный код даст ошибку. – JerryZhou
Спасибо, вы отвечаете правильно, я просто надеюсь найти лучший способ, похожий на colorPredicate = (color == .black)? predicateForBlack(): predicateForWhite() этот вид быстрого доступа. Но все равно спасибо. – JerryZhou
Да, вы можете это сделать, но это будет работать только для 2-х случаев. Если вам нужно больше цветов в будущем, лучше использовать переключатель. Но это прекрасно работает: пусть colorPredicate = (color == .black)? predicateForBlack(): predicateForWhite() – simonWasHere