Swift的野心成为可以任性打Call的语言(新特性@dynamicCallable)
Swift 新特性@dynamicCallable
众所周知,Swift由于出身名门,因此天生就可以与C、C++和Objective-C无缝对接。Swift未来的规划是能够与Python、JavaScript、Perl和ruby等语言实现融合调用。Swift社区为此研究了很多的方案,目前他们认为hooks方式可能是最好的方案。
为了逐步实现上面提到目标,Swift 5.0新增了@dynamicCallable属性。@dynamicCallable属性属于语法糖类型(语法糖是指某一属性带来的语义上的优势多于功能上的)。
@dynamicCallable作用是让我们可以像调用函数一样去调用的类型。下面的代码
@dynamicCallable struct ToyCallable {
func dynamicallyCall(withArguments: [Int]) {}
func dynamicallyCall(withKeywordArguments: KeyValuePairs<String, Int>) {}
}
let x = ToyCallable()
x(1, 2, 3)
// 编译器会翻译为 `x.dynamicallyCall(withArguments: [1, 2, 3])`
x(label: 1, 2)
// 编译器会翻译为 `x.dynamicallyCall(withKeywordArguments: ["label": 1, "": 2])`