为什么核心动画类型采用字符串键路径?

Hen*_*per 2 core-animation ios swift

我很困惑为什么在keyPath为a上的特定属性设置动画时它是一个字符串CALayer.使用枚举会不会更好更安全?只是想知道键入字符串文字的好处.

例: let flash = CASpringAnimation(keyPath: "borderColor")

Rob*_*ier 6

虽然Josh Homann的回答非常有帮助,但值得注意的是,在这种情况下没有特定的枚举可行.CASpringAnimation可以应用于任何属性,而不仅仅是内置属性.即使是"内置"也会产生误导,因为有许多内置的CALayer子类,它们本身具有不同的属性.动画甚至不必应用于图层(SceneKit也使用它们).如果您为图层添加了自定义属性,并希望使用弹簧动画为其设置动画,那么如果这是枚举则不可能.

也就是说,你可以做得比在这里传递一个字符串(甚至是字符串常量)更好.你可以使用#keyPath:

let flash = CASpringAnimation(keyPath: #keyPath(CALayer.borderColor))
Run Code Online (Sandbox Code Playgroud)

这提供了编译时检查,实际上定义了此方法.这可以实现大部分目标,因为您正在寻找枚举,同时具有足够的灵活性来处理任何目标和财产.

在未来,希望Core Animation能够接受新的Swift 4"KeyPath"类型,你将能够做到这一点:

let flash = CASpringAnimation(keyPath: \CALayer.borderColor)
Run Code Online (Sandbox Code Playgroud)