我需要能够将#keypath传递给func来过滤我的CoreData记录。
我确实是这样的:
func filteredExercises(with propertyKeyPath: #keyPath, filter: Any) {
do {
let filteredExercises = try CoreStore.fetchAll(
From<ExerciseEntity>(),
Where<ExerciseEntity>("%K = %@", #keyPath(ExerciseEntity.muscle.name), filter)
)
} catch {
}
}
但是请确保#keyPath不是类型,如何正确执行?还是我需要准备一个过滤字符串,然后将其传递给谓词之类的函数?
答案 0 :(得分:1)
如果您想使用#keyPath
,那么它只是一个字符串。
(创建用于KVC的String的一种更安全的形式。)
在要接收String
的地方将参数类型声明为#keyPath
,并将其传递到接受#keyPath
的任何地方。
func filteredExercises(with propertyKeyPath: String, filter: Any) {
do {
let filteredExercises = try CoreStore.fetchAll(
From<ExerciseEntity>(),
Where<ExerciseEntity>("%K = %@", propertyKeyPath, filter)
)
} catch {
}
}
如果您需要使用Swift-native KeyPath
,那就是另一个问题。