Matriz de funciones <Opcional <T>> -> Opcional <Matriz <T>>
Esto es lo que estoy tratando de hacer:
extension Array<Optional<T>> {
func unwrap() -> Optional<Array<T>> {
let a = self.flatMap() { a in
switch a {
case Optional.Some(let x): return [x]
case Optional.None: return []
}
}
if a.count == self.count {
return Optional.Some(a)
} else {
return Optional.None
}
}
}
Pero no se compila con errorUse of undeclared type T
. Así es como quiero usarlo:
let a = [Optional.Some(2), Optional.Some(3), Optional.Some(4)]
let b = [Optional.Some(1), Optional.None]
a.unwrap() // Optional[2, 3, 4]
b.unwrap() // nil
¿Cómo puedo evitar esto? ¿O no existe tal posibilidad en Swift?