在Realm中查询(使用Swift)

nik*_*ers 6 types realm ios swift

我正在玩realm.io.我写了几个对象,现在我想查询它们.我的数据类:

class Sample : RLMObject {
    dynamic var sampleKey : String = ""
}
Run Code Online (Sandbox Code Playgroud)

和我的查询代码

@IBAction func readLocalRecord(sender: UIButton) {

    let s : NSString = NSString.stringWithString("sampleKey == SampleValue")
    let p : NSPredicate = NSPredicate(format: "sampleKey = %@", argumentArray: NSArray(object: NSString.stringWithString("SampleValue")))

    // the following throws exception, that I cannot catch in Swift:
    //   'Unsupported predicate value type', reason: 'Object type any not supported'
    let r = Sample.objectsWithPredicate(p)
}
Run Code Online (Sandbox Code Playgroud)

网站和RLMObject的标题表明我应该可以说Sample.objectsWhere("sampleKey ='SampleValue'")(或者类似的),但是对象给出了编译错误,抱怨函数不在那里,并且有没有自动完成功能.所以我尝试使用objectsForPredicate,但是这表示类型为'any'(挖掘标题,我发现这等于ObmC在Realm术语中的'id'类型).我在这做错了什么?我试着显得非常明确,确保使用NSString而不是String和NSArray而不是Array,但仍有些东西被解释为'id'而不是spesific类型.

有什么建议?

干杯

-Nik

jam*_*rez 0

NSArray 总是会返回 [AnyObject] 的等价物?即使指定字符串的类型,当您创建它时,如果可以假定多个类型,其他对象也不一定知道该类型。

我会尝试创建一个 [String] 类型的数组并传递它,或者使用直接接受参数的 NSPredicate ( predicateWithFormat:arguments: ) 而不是在数组中 - 也许这会起作用?

最后,我不熟悉领域,但我发现的一个模式是,如果某些东西在 swift 中不可用,那么它是可用的,但只有另一种方法可以做到这一点。例如,RLMObject 上是否有“对象”数组?如果是这样,你可以执行objects.filter({ $0.key == value }),或完整的块(允许使用断点等进行调试 - 我个人更喜欢使用 NSPredicates。