Рассмотрим этот код ...Почему flatMap, используемый через расширение, возвращает разные результаты, чем при вызове напрямую?
import Foundation
let source = ["A", "B", nil, "D"]
print(type(of:source))
let result1 = source.flatMap{ $0 }
print(type(of:result1))
print(result1)
extension Array
{
func sameThing() -> Array
{
return self.flatMap{ $0 }
}
}
let result2 = source.sameThing()
print(type(of:result2))
print(result2)
result1
является Array<String>
в то время как result2
является Array<Optional<String>>
. Но почему?
Я попытался использовать последовательность вместо массива, но и не повезло.
Это все еще не объясняет 'nil' в' result2' –
. Чтобы облегчить эту работу для дополнительных массивов, см. Http://stackoverflow.com/q/38434125/2976878 – Hamish