簡體   English   中英

在Realm中查詢(使用Swift)

[英]Querying in Realm (using Swift)

我正在玩realm.io。 我寫了幾個對象,現在我想查詢它們。 我的數據類:

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

和我的查詢代碼

@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)
}

網站和RLMObject的標題表明我應該可以說Sample.objectsWhere(“sampleKey ='SampleValue'”)(或者類似的),但是對象給出了編譯錯誤,抱怨函數不在那里,並且有沒有自動完成功能。 所以我嘗試使用objectsForPredicate,但是這表示類型為'any'(挖掘標題,我發現這等於ObmC在Realm術語中的'id'類型)。 我在這做錯了什么? 我試着顯得非常明確,確保使用NSString而不是String和NSArray而不是Array,但仍有些東西被解釋為'id'而不是spesific類型。

有什么建議?

干杯

-Nik

使用Xcode 6 beta 5,你的代碼對我來說很好。順便說一句,你不需要在這里明確使用NSArrayNSString - Swift將為你橋接到objective-c類型。 以下適用於我並打印出我希望看到的對象:

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 : NSPredicate = NSPredicate(format: "sampleKey = %@", argumentArray: [ "SampleValue" ])

        let r = Sample.objectsWithPredicate(p)
        println(r)
    }

    func application(application: UIApplication!, didFinishLaunchingWithOptions launchOptions: NSDictionary!) -> Bool {

        readLocalRecord()

        return true
    }
}

輸出是:

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

請注意,Realm的objectsWithPredicate方法返回一個Realm數組,而不是普通數組。

NSArray總是會返回[AnyObject]的等價物嗎? 即使指定字符串的類型,在創建字符串時,如果可以假設多個字符串,則其他對象不一定知道類型。

我會嘗試創建一個類型[String]的數組並傳遞它,或者使用直接接受參數的NSPredicate(predicateWithFormat:arguments :)而不是數組 - 也許這會起作用?

最后,我對領域並不熟悉,但是我發現的一種模式,如果swift中沒有可用的東西,它是可用的,但只有另一種方法可以做到。 例如,RLMObject上是否有'objects'數組? 如果是這樣,你可以做objects.filter({$ 0.key == value}),或者一個完整的塊(允許使用斷點調試等 - 我個人更喜歡使用NSPredicates。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM