私は、データベースのRealmを使用するプロジェクトで作業しています。私はちょうどキー値のコーディングを発見したので、TSVテーブルをオブジェクトプロパティ(テーブルの列見出しをキーとして使用)に変換する際に、この値を使用したいと考えています。今のところ、次のようになります:オブジェクトのプロパティを反復処理する(Realm、またはそうでないかもしれない)
let mirror = Mirror(reflecting: newSong)
for property in mirror.children {
if let index = headers.index(of: property.label!) {
newSong.setValue(headers[index], forKey: property.label!)
} else {
propertiesWithoutHeaders.append(property.label!)
}
}
ミラーなしでプロパティを繰り返し処理する方法はありますか? Realmのドキュメント(あるいはAppleのKVCのドキュメント)でも、同じことを達成するためにfor property in Song.properties
やfor property in Song.self.properties
のようなことをすることができると私は確信していました。
私がこれをやりたい主な理由は、同じ場所で私がこれを読んだと思うから、反復(またはKVC?)は文字列でしか動作しないと言っていたと思います。 Ints、Bools、およびDatesのように、オブジェクトであるプロパティは自動的にスキップされます(同じ方法でそれらを設定することはできません)。上記のコードは、実際に私のコードを簡略化したものである、私は現在、このようなオブジェクトをスキップしています実際のバージョンで:
let propertiesToSkip = ["title", "artist", "genre"]
for property in mirror.children where !propertiesToSkip.contains(property.label!) {
...
私はこの.properties
事を想像しましたか?または、上記のように名前を付けずに自動的にオブジェクト/クラスをスキップして、このように反復する方法はありますか?
ありがとう:)
ありがとうございました!しかし、 'property.type!= Object'をチェックすると、" Binary operator!=は 'PropertyType'と 'Object.Type'型のオペランドには適用できません。これらをそれぞれに等しくなるようにキャストする方法は分かりますか?他の?あるいは、 'properties'に既にObjects/Listsが含まれていない可能性がありますか? –
あなたは大歓迎ですよね、' property.type'はObjective-C enumです(https://github.com/realm/realm-cocoa/blob /255b2018c19398efaa52e816ccf59ef11be24cbd/Realm/RLMConstants.h#L51)実際のクラスの名前ではなく、列挙型の値を確実に比較する必要があります。 – TiM