Быстрое определение и вызов встроенного закрытия напрямую - PullRequest
1 голос
/ 22 января 2020

Я могу назначить встроенное замыкание для типа функции

 > var a = { ()-> Bool in return true }

и использовать его:

 > true==a()
 $R2: Bool = true

, если функция одноразовая, было бы неплохо использовать встроенный напрямую. Это не работает:

> true=={ ()-> Bool in return true } 
 error: repl.swift:16:5: error: binary operator '==' cannot be applied to operands of type 'Bool' and '() -> Bool'

В соответствии с ошибкой, RHS - это тип функции inline, а не тип возвращаемого значения. Есть ли другой синтаксис, который я должен использовать? Можно ли вызвать inline напрямую?

Редактировать после ответа: Это очень удобно в каскадных условиях в операторах if: if b == 2, {/ * что-то делать, только если b == 2 проходит * /} (), пусть x = ... {...} else {...}

1 Ответ

3 голосов
/ 22 января 2020
> true == a()

сравнивает true с результатом вызова закрытия a (с пустым списком аргументов). Вы можете сделать то же самое встроенным, но вы все равно должны вызвать замыкание:

> true == { ()-> Bool in return true }()
$R0: Bool = true

Обратите внимание, что тест на равенство с true всегда избыточен, поэтому это выражение идентично

{ ()-> Bool in return true }()
...