Ios 在域Swift中声明Int数组

Ios 在域Swift中声明Int数组,ios,arrays,swift,realm,Ios,Arrays,Swift,Realm,如何在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

如何在
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.'

正如错误消息所述,您必须使用
RLMArray
——或者更确切地说,它是swift等效的
List


请参阅:

原语列表还不受支持。要跟踪添加对此的支持,存在一个问题。你会发现目前有一些解决方法

最简单的解决方法是创建一个对象来保存int值。然后,模型将有一个对象列表

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

class IntObject: Object {
    dynamic var value = 0
}
类Foo:Object{
让integerList=List()//解决方法
}
类为Object:Object{
动态var值=0
}

接受的报价在内存方面非常昂贵。 您可能会得到一个非常大的“n”个对象的列表

这不是一个对与错的问题,但我认为在这里写一个不同的解决方法是很好的

另一种方法:
我决定使用单个字符串来表示Int数组

在我的领域类中,我定义了一个变量:

dynamic var arrInt: String? = nil
而且使用起来非常简单:

let arrToSave = [0, 1, 33, 12232, 394]
<MY_CUSTOM_REALM_CLASS>.arrInt = arrToSave.map { String(describing: $0) }.joined(separator: ",")
让arrToSave=[0,1,3312232394]
.arrInt=arrToSave.map{String(说明:$0)}.joined(分隔符:“,”)
回到这里:

let strFetched = <MY_CUSTOM_REALM_CLASS>.arrInt 
let intArray = strFetched.components(separatedBy: ",").flatMap { Int($0) }
让strFetched=.arrInt
设intArray=strFetched.components(以“,”分隔)。flatMap{Int($0)}

我很高兴听到您的反馈,因为我认为这种方法更好。

幸运的是,Realm 3.0及更高版本现在支持基本类型的数组。(2017年10月31日)

现在,您可以直接在rlmarray或list中存储基元类型或其可为null的对应类型(更具体地说:布尔、整数和浮点数类型、字符串、日期和数据)。如果您想定义这样一个基本值的列表,就不再需要定义繁琐的单字段包装器对象。相反,您可以只存储原语值本身

类MyObject:Object{
@objc动态变量myString:String=“”
让myIntArray=List()
}

来源:

真是难以置信,Realm不支持这么简单的事情。支持还没有实现吗?还没有。但核心团队现在正在努力工作。它很快就会被支持。看起来它现在已经被支持了,从v3.0.0-beta版开始。4@KimiChiu
List
应该可以从v3.0版开始工作。可能你有点问题。为什么要投否决票?我把这个答案作为一个对我有用的建议,如果你不喜欢这个解决方案,请分享你的想法,不要只是否决投票。使用
description
是一个非常非常糟糕的主意。使用以下命令:
让stringOfArray=arrToSave.map{String(description:$0)}.joined(separator:“,”)
。From:
let intArray=stringOfArray.components(以“,”分隔)。flatMap{Int($0)}
class MyObject : Object {
    @objc dynamic var myString: String = ""
    let myIntArray = List<Int>()
}