我需要能够将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不是一种类型,如何正确地执行它?或者我需要准备一个过滤字符串,然后像谓词一样传递给func?
最佳答案
如果您想使用#keyPath
,那么它只是一个字符串。
(创建用于KVC的字符串的一种更安全的形式。)
将参数类型声明为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
,那是另一个问题。关于ios - 快速传递键路径作为func的参数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55904135/