#keyPath 而不是直接将键作为字符串传递有什么用?

What is the use of #keyPath rather than directly passing key as a String?

这两种格式之间的有用区别是什么:

request.sortDescriptors = [NSSortDescriptor(key:"dateCreated", ascending: false)]

request.sortDescriptors = [NSSortDescriptor(key: #keyPath(Note.dateCreated), ascending: false)]

第二种格式#keyPath 让我感到困惑。它到底是什么,我在哪里可以阅读更多相关信息?

没有区别

key:"dateCreated"

key: #keyPath(Note.dateCreated)

两者都将使用 Note 对象的 dateCreated 属性 进行排序 后者具有避免硬编码问题的优势 e.x 编写 datCreated 而不是 dateCreated 会引发编译时错误,因此它可以安全地避免 run-time 肯定会发生的崩溃在相同情况下与前者发生

https://www.klundberg.com/blog/swift-4-keypaths-and-you/

http://chris.eidhof.nl/post/sort-descriptors-in-swift/