Почему быстрый компилятор считает замыкание замыкающим? - PullRequest
0 голосов
/ 03 апреля 2019

Я пытаюсь объявить void, возвращающий замыкание, и использовать его сразу же после другого выражения. Итак, я понимаю, что компилятор не «видит» пробелы, но почему он думает, что someFunc имеет аргумент замыкания, когда он явно этого не делает? Другими словами, почему ; необходим?

func someFunc() {

}

func someFunc2() {
    someFunc();

    { arg in
        print("\(arg + 1)")
    }(0)
}

Когда точка с запятой удалена, xcode выдает ошибку «Аргумент передан для вызова, который не принимает аргументов». Это действительно в соответствии с дизайном?

Ответы [ 2 ]

0 голосов
/ 03 апреля 2019

Вы говорите, что "Я пытаюсь объявить закрытие, возвращающее пустоту".но вы не объявили замыкание в функции return

Итак, изменения: -

func someFunction() {
    print("Some function is call")
}

func someFunction2() -> ((_ arg: Any) -> Void) {
    someFunction()

    return { arg in
        print("Closure return")
    }
}
0 голосов
/ 03 апреля 2019

f { /* closure contents here */ } является более распространенной формой конечного замыкания, но скобки не обязательно должны быть опущены (фактически, они необходимы, если есть другие параметры перед замыканием), что означает, что f() { /* closure contents here */ } также является действительным завершающим замыканием.

Некоторым людям нравится начинать { с новой строки (например, я знаю, что это соглашение в C #), так что это поведение выглядит такпредназначен для размещения таких людей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...