私はいくつかのjsonファイルからなるフォルダを持っています。文字列customObjectの辞書を繰り返し、customObject初期化子を呼び出します。
a.json
b.json
c.json
c.json2
c.json3
各ファイルには、レルムDBに挿入する必要のあるデータが含まれています。 a =オブジェクトの1つのタイプ、b =別のタイプのオブジェクト、c.json1、c.json2およびc.json3はすべて同じタイプのオブジェクトですが、コンテンツの量のために3つのファイルに分割されます。
オブジェクトの種類ごとにforループを作成するのではなく、2番目のforループを繰り返し処理できる辞書を作成しようとしています。
A、B、Cはそうのようなオブジェクトであるvar filesToProcess : [String: Object] =
["a.json" : A(), "b.json" : B(), "c.json" : C()]
for (str, obj) in filesToProcess {
let numFiles = FileCounter().getNumFilesStartingWith(filename : str, url : unzippedDestinationUrl)
for i in 0...numFiles {
var append : String = ""
i == 0 ? (append = "") : (append = String(i))
if let jsonData = try? Data(contentsOf: unzippedDestinationUrl.appendingPathComponent(str+append)){
if let array = (try? JSONSerialization.jsonObject(with: jsonData, options: [])) as? [[String: Any]] {
for item in array{
let itemJsonStr = item["data"] as! String
let item = obj(jsonStr : itemJsonStr)
DispatchQueue(label: "background").async {
let realm = try! Realm()
try! realm.write {
realm.add(item)
}
}
}
}
}
}
}
:
import Foundation
import RealmSwift
import Realm
open class A : Object {
open dynamic var _id : String = ""
open dynamic var prop1 : Int = 0
open dynamic var prop2 : String = ""
open override class func primaryKey() -> String? {
return "_id"
}
required public init() {
super.init()
}
public init(jsonStr: String)
{
if let dataDict = try? JSONSerializer.toDictionary(jsonStr){
self._id = dataDict ["id"] as! String
self.prop1 = dataDict ["prop1"] as! Int
self.prop2 = dataDict ["prop2"] as! String
}
super.init()
}
required public init(realm: RLMRealm, schema: RLMObjectSchema) {
super.init(realm: realm, schema: schema)
}
required public init(value: Any, schema: RLMSchema) {
fatalError("init(value:schema:) has not been implemented")
}
}
は、しかし、私のラインでループのために:
let item = obj(jsonStr : itemJsonStr)
私はエラーが発生します:
Cannot call value of Non-function type 'Object'
とにかくこの周辺にはありますか?私は何をしようとしているのですか、あるいは私がすでに行ったことに固執すべきですか?つまり、オブジェクトの種類ごとに繰り返しコードを持つ別々のループを作成する必要がありますか?注意:A、B、Cは異なるプロパティを持ちますが、すべてjson型の入力文字列で初期化されます