快速传递键路径作为func的参数

时间:2019-04-29 13:11:30

标签: ios swift nspredicate swift-keypath

我需要能够将#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不是类型,如何正确执行?还是我需要准备一个过滤字符串,然后将其传递给谓词之类的函数?

1 个答案:

答案 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,那就是另一个问题。