Swift flatMap proporciona resultados inesperados mientras se usa con una matriz opcional

Tenemos una matriz de los objetos Persona y cada objeto tiene otra matriz de Cadena, que es opcional. Queremos la lista consolidada de nombres de automóviles en nuestra sociedad.

struct Person {
    let name: String
    let address: String
    let age: Int
    let income: Double
    let cars: [String]?
}
let personsArray = [Person(name:"Santosh", address: "Pune, India", age:34, income: 100000.0, cars:["i20","Swift VXI"]),
                   Person(name: "John", address:"New York, US", age: 23, income: 150000.0, cars:["Crita", "Swift VXI"]),
                   Person(name:"Amit", address:"Nagpure, India", age:17, income: 200000.0, cars:nil)]

let flatmapArray = personsArray.flatMap({$0.cars})
print(flatmapArray)

// Resultado esperado: ["i20", "Swift VXI", "Crita", "Swift VXI"]

// Resultado: [["i20", "Swift VXI"], ["Crita", "Swift VXI"]]

¿Por qué no me da una sola matriz de cadena como resultado?

Hice un par de cambios en el código anterior, como mi código, como se muestra a continuación. En lugar de "nulo", intentamos pasar la matriz vacía al objeto de tercera persona.

Person(name:"Amit", address:"Nagpure, India", age:17, income: 200000.0, cars:Array())

El resultado fue:

[["i20", "Swift VXI"], ["Crita", "Swift VXI"], []]

Todavía no es el resultado esperado.

Si elimino el opcional de la matriz de automóviles como,

let cars: [String]  
Person(name:"Amit", address:"Nagpure, India", age:17, income: 200000.0, cars:Array()) 

entonces funciona como se esperaba.

Resultado:

["i20", "Swift VXI", "Crita", "Swift VXI"]

No estoy seguro de por qué no está dando el resultado anterior si el miembro es del tipo. La colección es opcional.

Respuestas a la pregunta(3)

Su respuesta a la pregunta