0

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

4

1 回答 1

2

如果您想使用#keyPath,那么它只是一个字符串。(创建一个旨在与 KVC 一起使用的字符串的一种更安全的形式。)

将参数类型声明为String, where you want to receive #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,那是另一个问题。

于 2019-04-29T14:48:38.840 回答