Swift 中的 @dynamicCallable 是什么?

Sar*_*ith 3 ios swift swift5

来自苹果的文档:

@dynamicCallable属性使您可以named types像使用简单的语法糖调用函数一样进行调用。主要用例是 动态语言互操作性

你为什么要使用一个@dynamicCallable而不是直接的方法?

Anb*_*hik 6

@dynamicCallable是 Swift 5 的一个新特性。来自Paul Hudson 关于“How to use @dynamicCallable in Swift”的文章(重点是我的):

SE-0216为 Swift添加了一个新@dynamicCallable属性,它带来了将类型标记为可直接调用的能力。它是语法糖而不是任何类型的编译器魔法, 有效地转换了这段代码:

let result = random(numberOfZeroes: 3)
Run Code Online (Sandbox Code Playgroud)

进入这个:

let result = random.dynamicallyCall(withKeywordArguments: ["numberOfZeroes": 3])
Run Code Online (Sandbox Code Playgroud)

[...]@dynamicCallable@dynamicMemberLookup[ SE-0195 ]的自然扩展 ,具有相同的目的:使 Swift 代码更容易与 Python 和 JavaScript 等动态语言一起工作。[...]@dynamicCallable在其方法接受和返回哪些数据类型方面非常灵活,让您可以从 Swift 的所有类型安全中受益,同时仍然有一些高级使用的回旋余地。