El nivel de optimization rápido "más rápido" rompe la sorting de la matriz

Tengo un problema realmente extraño. Estoy clasificando una serie de objects NSDictionary en mi aplicación, pero solo funciona correctamente cuando la aplicación se está ejecutando desde Xcode. Tan pronto como distribuyo la aplicación e instalo y la ejecuto en un dispositivo, la sorting ya no funciona.

Aquí está el código que se puede ejecutar en un área de juegos, con algunos ejemplos de objects NSDictionary. El código en la aplicación es el mismo.

import UIKit let p1 = NSDictionary(objects: ["Zoe", 32], forKeys: ["name", "age"]) let p2 = NSDictionary(objects: ["Adrian", 54], forKeys: ["name", "age"]) let p3 = NSDictionary(objects: ["Jeff", 23], forKeys: ["name", "age"]) let p4 = NSDictionary(objects: ["", 66], forKeys: ["name", "age"]) let p5 = NSDictionary(objects: [23], forKeys: ["age"]) let persons = [p1,p2,p3,p4,p5] let sortedPersons = persons.sorted { (p1, p2) -> Bool in (p2["name"] as? String) > (p1["name"] as? String) } 

Como puede ver, la sorting en el patio de recreo funciona correctamente. ¿Alguien sabe qué podría estar mal?

Actualizar

Descubrí que el nivel de optimization Swift está causando el problema. Establecer esto en -O (más rápido) hará que el order falle. Configurarlo en -Onone (Ninguno) hará que el orderamiento funcione correctamente.
¿Alguien tiene alguna sugerencia sobre cómo cambiar el código, por lo que funcionará con -O optimization?

Actualización 2

Presenté un informe de errores en Apple. Por el momento estoy usando un NSSet para orderar la matriz, que parece estar funcionando bien.

Última actualización

No he podido reproducir esto desde Xcode 6.1.1

Esto parece depender de su convención de nomenclatura dentro de su cierre orderado. Cambiar (p1, p2) a diferentes nombres lo resolverá. Con -Ostastest, el comstackdor parece estar haciendo incorrectamente 2 cosas:

1) causando que p1 y p2 dentro del cierre se refieran a los propios decimales de NS en lugar de los parameters de cierre

2) limpiar las references a los objects de la Biblioteca Nacional prematuramente, dado el n. ° 1

Cambie el código para que la última sección muestre:

 let sortedPersons = persons.sorted { (d1, d2) -> Bool in (d2["name"] as? String) > (d1["name"] as? String) }