Подтвердить что ты не робот

Однострочное закрытие без возврата

В Swift, если замыкание содержит только один оператор, оно автоматически возвращает значение, возвращаемое из этого единственного оператора.

Во всех случаях это не очень естественно. Рассмотрим пример:

func StringReturningFunc() -> String {
    return "Test String"
}

// Error: Cannot convert the expressions type '() -> $T0' to type 'String'
let closure: () -> () = {
    StringReturningFunc()
}

Как вы можете видеть, хотя закрытие должно вызывать только простую функцию, оно пытается автоматически вернуть возвращаемое значение, которое имеет тип String и не соответствует типу возврата void.

Я могу предотвратить это, реализовав тело закрытия таким образом:

let _ = StringReturningFunc()

Что кажется невероятно странным.

Есть ли лучший способ сделать это или это просто то, с чем мне нужно жить?

4b9b3361

Ответ 1

Причина, по которой это происходит, - сокращение сроков закрытия строк. В вашем закрытии есть неявное "возвращение", как оно написано.

let closure: () -> () = {
    StringReturningFunc()
    return
}

Написание такого текста должно работать

Ответ 2

Как насчет этого...;)

@discardableResult func StringReturningFunc() -> String {
    return "Test String"
}

// Error: Cannot convert the expressions type '() -> $T0' to type 'String'
let closure: () -> () = {
    StringReturningFunc()
}