Vin*_*ino 18 arrays realm ios swift
我怎样才能在里面声明一个整数数组RLMObject
?
喜欢 :
dynamic var key:[Int]?
Run Code Online (Sandbox Code Playgroud)
给出以下错误:
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.'
Run Code Online (Sandbox Code Playgroud)
kis*_*umi 36
遗憾的是,不支持基元列表.问题#1120跟踪添加对此的支持.你会发现一些想法如何解决当前的问题.
最简单的解决方法是创建一个对象来保存int值.然后模型有一个对象的List.
class Foo: Object {
let integerList = List<IntObject>() // Workaround
}
class IntObject: Object {
dynamic var value = 0
}
Run Code Online (Sandbox Code Playgroud)
幸运的是,Realm 3.0 及更高版本现在支持原始类型的数组。(2017 年 10 月 31 日)
您现在可以直接在 RLMArrays 或 Lists 中存储原始类型或其可为 null 的对应物(更具体地说:布尔值、整数和浮点数类型、字符串、日期和数据)。如果要定义此类原始值的列表,则不再需要定义繁琐的单字段包装器对象。相反,您可以自己存储原始值!
class MyObject : Object {
@objc dynamic var myString: String = ""
let myIntArray = List<Int>()
}
Run Code Online (Sandbox Code Playgroud)
来源:https : //realm.io/blog/realm-cocoa-reaches-3-0/
接受的报价在记忆方面非常昂贵.您可能会获得一个非常大的"n"对象列表.
这不是对与错的问题,但我认为在这里写一个不同的解决方法是件好事.
另一种方法:
我决定用一个字符串来表示一个Int数组.
在我的Realm类中,我定义了一个变量:
dynamic var arrInt: String? = nil
Run Code Online (Sandbox Code Playgroud)
并且非常容易使用它:
let arrToSave = [0, 1, 33, 12232, 394]
<MY_CUSTOM_REALM_CLASS>.arrInt = arrToSave.map { String(describing: $0) }.joined(separator: ",")
Run Code Online (Sandbox Code Playgroud)
回来的路上:
let strFetched = <MY_CUSTOM_REALM_CLASS>.arrInt
let intArray = strFetched.components(separatedBy: ",").flatMap { Int($0) }
Run Code Online (Sandbox Code Playgroud)
很高兴听到您的反馈,因为我认为这种方法更好.