Если я хочу рассчитать, если все Bool
s в списке: true
с этим фрагментом, почему типы не будут правильно выведены?Неоднозначная ссылка на member &&
let bools = [false, true, false, true]
let result = bools.reduce(true, combine: &&)
Если я хочу рассчитать, если все Bool
s в списке: true
с этим фрагментом, почему типы не будут правильно выведены?Неоднозначная ссылка на member &&
let bools = [false, true, false, true]
let result = bools.reduce(true, combine: &&)
Я столкнулся с той же ошибка некоторое время назад (но с ||
). Если вы хотите использовать reduce
для этого, самое простое решение, чтобы написать
let result = bools.reduce(true, combine: { $0 && $1 })
или
let result = bools.reduce(true) { $0 && $1 }
вместо этого. Как было отмечено в комментариях, вы можете также использовать
let result = !bools.contains(false)
не только более удобным для чтения, но это также более эффективно, потому что он остановится на первой встрече false
, а не переборе по всему массиву (хотя компилятор может оптимизировать это).
Предлагаю вам посмотреть [здесь] (http://stackoverflow.com/a/34699637/5654848). Это объясняется подробно. – Dershowitz123
Вы можете просто написать это как 'let result =! Bools.contains (false)', который будет компилироваться с двусмысленностью btw :) Но определенно интересуется именно тем, почему это неоднозначно. – Hamish