Consulta en el reino (usando Swift)

Estoy jugando con realm.io. He escrito un par de objects, y ahora quiero consultarlos. Mi class de datos:

class Sample : RLMObject { dynamic var sampleKey : String = "" } 

y mi código de consulta

 @IBAction func readLocalRecord(sender: UIButton) { let s : NSString = NSString.stringWithString("sampleKey == SampleValue") let p : NSPnetworkingicate = NSPnetworkingicate(format: "sampleKey = %@", argumentArray: NSArray(object: NSString.stringWithString("SampleValue"))) // the following throws exception, that I cannot catch in Swift: // 'Unsupported pnetworkingicate value type', reason: 'Object type any not supported' let r = Sample.objectsWithPnetworkingicate(p) } 

El lado de la web y el encabezado de RLMObject indican que debería poder decir Sample.objectsWhere ("sampleKey = 'SampleValue'") (o similar), pero objectWhere da un error de compilation quejándose de que la function no está allí y hay sin autocomplete para ello. Así que intenté con objectsForPnetworkingicate en su lugar, pero esto dice que el tipo 'any' (cavando a través de los encabezados, me parece que esto es igual al tipo 'id' de ObjC en la jerga del reino). ¿Qué estoy haciendo mal aquí? Intento ser veery explícito, asegurándose de usar NSString en lugar de String y NSArray en lugar de Array, pero aún algo se interpreta como 'id' en lugar de un tipo específico.

¿Alguna sugerencia?

Aclamaciones

-Nik

Su código funciona bien para mí con Xcode 6 beta 5. Incidentalmente, no necesita utilizar explícitamente NSArray y NSString aquí: Swift se unirá a los types de objectives c para usted. Lo siguiente funciona para mí e imprime el object que espero ver:

 import Realm class Sample : RLMObject { dynamic var sampleKey : String = "" } @UIApplicationMain class AppDelegate: UIResponder, UIApplicationDelegate { var window: UIWindow? func readLocalRecord() { // create some sample records RLMRealm.defaultRealm().beginWriteTransaction() var s = Sample() s.sampleKey = "Testing" RLMRealm.defaultRealm().addObject(s) var s2 = Sample() s2.sampleKey = "SampleValue" RLMRealm.defaultRealm().addObject(s2) RLMRealm.defaultRealm().commitWriteTransaction() let p : NSPnetworkingicate = NSPnetworkingicate(format: "sampleKey = %@", argumentArray: [ "SampleValue" ]) let r = Sample.objectsWithPnetworkingicate(p) println(r) } func application(application: UIApplication!, didFinishLaunchingWithOptions launchOptions: NSDictionary!) -> Bool { readLocalRecord() return true } } 

La salida es:

 RLMArray <0x7fe8241218c0> ( [0] Sample { sampleKey = SampleValue; } } 

Tenga en count que el método Realm's objectsWithPnetworkingicate devuelve una matriz de Realm, no una matriz normal.

Un NSArray siempre devolverá el equivalente de [AnyObject]? Incluso especificando el tipo de cadena, cuando la crea, otros objects no necesariamente conocerán el tipo, si se puede asumir más de uno.

Intentaría crear una matriz de tipo [String] y pasarla en su lugar, o usar el NSPnetworkingicate que toma arguments directamente (pnetworkingicateWithFormat: arguments:) en lugar de en una matriz; ¿quizás esto funcionaría?

Por último, no estoy familiarizado con el reino, pero un patrón que he encontrado, si algo no está disponible en Swift es que está disponible, pero que hay otra forma de hacerlo. Por ejemplo, ¿hay una matriz de "objects" en el RLMObject? Si es así, podrías hacer objects.filter ({$ 0.key == value}), o un bloque completo (que permite depurar con puntos de interrupción, etc.), que personalmente prefiero usar NSPnetworkingicates.