Сделайте это менее двусмысленным, указав тип возврата с помощью as [Int]
:
myArray.map({ (number: Int) in
if number % 2 != 0 {
return 0
} else {
return number
}
}) as [Int]
Или:
let result: [Int] = myArray.map({ (number: Int) in
if number % 2 != 0 {
return 0
} else {
return number
}
})
print(result) //[0, 2, 0, 4, 0]
Как отмечает vadian : Неопределенность проистекает из того факта, что общий тип возвращаемого значения в замыкании не может быть выведен.
Чтобы понять, как компилятор определяет тип возврата замыкания, давайте вернемся к синтаксису замыкания:
let myClosure: returnType = { (params) -> returnType in
statements
}
Здесь тип myClosure
равен returnType
. И он установлен в двух местах: после :
и после ->
. Вы можете использовать вывод типа, удалив returnType
из одного из двух мест, но не из обоих.
Чтобы вы могли удалить его из фигурных скобок (как в коде выше):
let result: [Int] = myArray.map({ (number: Int) in
Или сразу после имени переменной и указания типа возврата замыкания внутри фигурных скобок:
let result = myArray.map({ (number: Int) -> Int in