La matriz Swift mutable se convierte en NSArray cuando inicializo con Obj-C

Estoy creando mis models base en Swift (2.0) y luego controlando las vistas en Objective-C. Todavía soy nuevo en Swift, así que ojalá pase por alto algo simple, pero aquí está el problema:

Estoy haciendo una matriz mutable en Swift, pero cuando inicializo la matriz en mi porción de Objective-c del progtwig, se convierte en una NSArray , más específicamente se convierte en: Swift._SwiftDefernetworkingNSArray

¿Por qué se está volviendo inmutable cuando inicializo? Aquí está mi código Swift:

 import Foundation @objc public class Model : NSObject { var books:[Book] override init(){ self.books = [Book]() } } 

Y aquí está mi Código Obj-c;

 Model *bookCollection = [[Model alloc]init]; 

No puedo agregar objects a mi colección bookCollection.books (porque se ha convertido en un NSArray ) y cuando establezco un punto de interrupción y po, puedo ver que es un Swift._SwiftDefernetworkingNSArray . Se supone que bookCollection.books es un NSMutableArray .

¿Alguna idea?

En rápido, la diferencia entre la matriz mutable e inmutable es;

 var books:[Book] // is a mutable array let books:[Book] = [book1, book2]; // is immutable array due to let 

pero no creo, se sigue la misma regla cuando se puentea a ObjC.

Solo por una solución, puede tener mutableArray específicamente.

 import Foundation @objc public class Model : NSObject { var books:NSMutableArray = NSMutableArray(); override init(){ super.init(); // other code } } 

Deberá analizar los valores en la class de libros al recuperarlos de la matriz.

Se supone que bookCollection.books es un NSMutableArray.

No, no es. Var no significa que el object Objective-C puenteado sea mutable: significa que la propiedad puede asignarse.

El tipo de matriz Swift es una estructura, no una class. Esto tiene importantes implicaciones de puente. La reference en sí misma no se puede compartir sin pasarla como un valor inout , e incluso entonces las references no pueden almacenarse. Si se puentea como un NSMutableArray , sería posible tener references mutantes indetectables, y Swift no lo permite.

Sin embargo, debería poder asignar un nuevo NSArray a su propiedad desde el código Objective-C. Por ejemplo, esto debería funcionar:

 bookCollection.books = [bookCollection.books arrayByAddingObject:myNewBook]; 

Su otra opción, obviamente, es declarar books como NSMutableArray desde el lado Swift.