[英]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>()
}
正如錯誤消息所述,您必須使用RLMArray
- 或者更確切地說它是快速等效的List
。
請參閱: Realm docs
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.