簡體   English   中英

在Realm Swift中聲明一個Int數組

[英]Declare an array of Int in Realm Swift

如何在RLMObject聲明一個整數數組?

喜歡 :

dynamic var key:[Int]?

給出以下錯誤:

Terminating app due to uncaught exception 'RLMException', reason: ''NSArray' is not supported as an RLMObject property. All properties must be primitives, NSString, NSDate, NSData, RLMArray, or subclasses of RLMObject. See https://realm.io/docs/objc/latest/api/Classes/RLMObject.html for more information.'

遺憾的是,不支持基元列表。 問題#1120跟蹤添加對此的支持。 你會發現一些想法如何解決當前的問題。

最簡單的解決方法是創建一個對象來保存int值。 然后模型有一個對象的List。

class Foo: Object {
    let integerList = List<IntObject>() // Workaround
}

class IntObject: Object {
    dynamic var value = 0
}

接受的報價在記憶方面非常昂貴。 您可能會獲得一個非常大的“n”對象列表。

這不是對與錯的問題,但我認為在這里寫一個不同的解決方法是件好事。

另一種方法:
我決定用一個字符串來表示一個Int數組。

在我的Realm類中,我定義了一個變量:

dynamic var arrInt: String? = nil

並且非常容易使用它:

let arrToSave = [0, 1, 33, 12232, 394]
<MY_CUSTOM_REALM_CLASS>.arrInt = arrToSave.map { String(describing: $0) }.joined(separator: ",")

回來的路上:

let strFetched = <MY_CUSTOM_REALM_CLASS>.arrInt 
let intArray = strFetched.components(separatedBy: ",").flatMap { Int($0) }

很高興聽到您的反饋,因為我認為這種方法更好。

幸運的是,Realm 3.0及更高版本現在支持基本類型的數組。 (2017年10月31日)

您現在可以直接在RLMArrays或Lists中存儲基本類型或其可空對應項(更具體地說:布爾值,整數和浮點數類型,字符串,日期和數據)。 如果要定義此類原始值的列表,則不再需要定義繁瑣的單字段包裝器對象。 相反,您可以自己存儲原始值!

class MyObject : Object {
    @objc dynamic var myString: String = ""
    let myIntArray = List<Int>()
}

資料來源: https//realm.io/blog/realm-cocoa-reaches-3-0/

正如錯誤消息所述,您必須使用RLMArray - 或者更確切地說它是快速等效的List

請參閱: Realm docs

暫無
暫無

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

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