来自苹果的文档:
该
@dynamicCallable属性使您可以named types像使用简单的语法糖调用函数一样进行调用。主要用例是 动态语言互操作性。
你为什么要使用一个@dynamicCallable而不是直接的方法?
@dynamicCallable是 Swift 5 的一个新特性。来自Paul Hudson 关于“How to use @dynamicCallable in Swift”的文章(重点是我的):
SE-0216为 Swift添加了一个新
@dynamicCallable属性,它带来了将类型标记为可直接调用的能力。它是语法糖而不是任何类型的编译器魔法, 有效地转换了这段代码:Run Code Online (Sandbox Code Playgroud)let result = random(numberOfZeroes: 3)进入这个:
Run Code Online (Sandbox Code Playgroud)let result = random.dynamicallyCall(withKeywordArguments: ["numberOfZeroes": 3])[...]
@dynamicCallable是@dynamicMemberLookup[ SE-0195 ]的自然扩展 ,具有相同的目的:使 Swift 代码更容易与 Python 和 JavaScript 等动态语言一起工作。[...]@dynamicCallable在其方法接受和返回哪些数据类型方面非常灵活,让您可以从 Swift 的所有类型安全中受益,同时仍然有一些高级使用的回旋余地。