Swift 将键路径作为函数的参数传递
Swift passing key path as a param of func
我需要能够将#keypath 传递给函数来过滤我的 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
,那是另一个问题。
我需要能够将#keypath 传递给函数来过滤我的 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
,那是另一个问题。