我需要能够将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 nativeKeyPath,那是另一个问题。

关于ios - 快速传递键路径作为func的参数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55904135/

10-09 21:30