Что такое @dynamicCallable в Swift? - PullRequest
0 голосов
/ 29 марта 2019

Из документации Apple:

Атрибут @dynamicCallable позволяет вам звонить named types так же, как вы звоните функции с использованием простого синтаксического сахара. Основной вариант использования динамическая совместимость языков .

Почему вы хотите использовать @dynamicCallable вместо прямого сопоставления?

1 Ответ

4 голосов
/ 29 марта 2019

@dynamicCallable - это новая функция Swift 5. Из статья Пола Хадсона "Как использовать @dynamicCallable в Swift" (выделено):

SE-0216 добавляет новый атрибут @dynamicCallable в Swift, что дает возможность помечать тип как вызываемый напрямую.Это синтаксический сахар, а не какая-то разновидность магии компилятора, эффективно преобразующая этот код:

let result = random(numberOfZeroes: 3)

В это:

let result = random.dynamicallyCall(withKeywordArguments: ["numberOfZeroes": 3])

[...] @dynamicCallable является естественным расширением @dynamicMemberLookup [ SE-0195 ] и служит для той же цели: облегчить работу кода Swift наряду с динамическими языками, такими как Python и JavaScript.[...] @dynamicCallable действительно гибко относится к типам данных, которые его методы принимают и возвращают, что позволяет вам воспользоваться всей безопасностью типов Swift, в то же время сохраняя некоторое пространство для маневра для расширенного использования.

...