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.'
プリミティブのリストは、残念ながらまだサポートされていません。問題がある #112 そのためのサポートの追加を追跡する。現在、これを回避する方法がいくつかあります。
最も簡単な回避策は、int値を保持するオブジェクトを作成することです。次に、オブジェクトのリストを持つモデル。
class Foo: Object {
let integerList = List<IntObject>() // Workaround
}
class IntObject: Object {
dynamic var value = 0
}
受け入れられたオファーは、メモリに関して非常にコストがかかります。オブジェクトの非常に大きな「n」のリストを取得する場合があります。
これは正しいことでも間違っていることでもありませんが、ここに別の回避策を書くのは良いことだと思います。
別のアプローチ:
1つの文字列を使用して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: ",")
そして帰り道:
let strFetched = <MY_CUSTOM_REALM_CLASS>.arrInt
let intArray = strFetched.components(separatedBy: ",").flatMap { Int($0) }
私はこのアプローチがより良いと思うので、あなたのフィードバックを聞いて幸せになります。
さいわい、プリミティブ型の配列がRealm 3.0以降でサポートされるようになりました。 (2017年10月31日)
RLMArraysまたはLists内に直接プリミティブ型またはnullが可能な対応物(より具体的には、ブール値、整数および浮動小数点型、文字列、日付、データ)を格納できるようになりました。このようなプリミティブ値のリストを定義する場合は、面倒な単一フィールドラッパーオブジェクトを定義する必要はありません。代わりに、プリミティブ値自体を格納できます!
class MyObject : Object {
@objc dynamic var myString: String = ""
let myIntArray = List<Int>()
}
エラーメッセージに示されているように、RLMArray
を使用する必要があります-または、Swift同等のList
です。
参照: レルムドキュメント