例子
@dynamicCallable
struct DictionaryGenerator {
func dynamicallyCall(withKeywordArguments args: KeyValuePairs<String, Any>) -> [String: Any] {
var dic = [String : Any]()
for item in args {
dic[item.0] = item.1
}
return dic
}
}
使用方法
let generator = DictionaryGenerator()
print(generator(name: "Tom", age: 24)) // ["name": "Tom", "age": 24]
从上面的例子可以看出,通过@dynamicCallable, 用户可以用该类型的实例动态地传入参数,通过dynamicallyCall方法解析传入的参数来进行程序逻辑处理。这个机制使得Swift语言进一步具备了动态语言的功能。@dynamicCallable和@dynamicMemberLookup这两个特性结合在一起能够实现Python等脚本语言动态添加、修改属性及向函数传入不同参数的功能。
网友评论