Примечание: SwiftyJSON является обязательным для разбора JSON в Swift.
Он же слишком generic и очень медленный? Вчера например парсил json в котором массив из 490 объектов, парс одного объекта занимал 0.2 секунды(iPhone 6+), т.е. на парс всего объекта ушло бы ~100 секунд, но к сожалению не хватило оперативы. Может я конечно что-то делал не так :)
Пример кода и замеры на симуляторе iPhone 7+, чтоб хватило оперативы на парс:
Код
func parse(data: Data?) -> [Shop] {
var shops = [Shop]()
let date = Date()
if let data = data,
let jsonS = try? JSONSerialization.jsonObject(with: data, options: JSONSerialization.ReadingOptions(rawValue: 0)) as? [String: Any],
let dataz = jsonS?["dataz"] as? [String: [String: Any]] {
shops = dataz.flatMap({Shop(json: $1)})
}
print("simple parse \(date.timeIntervalSinceNow)")
print(shops.count)
return shops;
}
func parse(swiftyData: Data?) -> [Shop] {
var shops = [Shop]()
let date = Date()
if let data = swiftyData {
let json = JSON(data: data)
let dataz = json["dataz"]
shops = dataz.flatMap({Shop(switfyJSON: $1)})
}
print("swifty parse \(date.timeIntervalSinceNow)")
print(shops.count)
return shops;
}
Заключительный этап. Изменяем callback и interface, так чтобы он возвращал String
Вчера столкнулся с подобно задачей задачей, есть небольшое замечание: jni берет сигнатуру метода с класса SQLiteCustomFunction метод dispatchCallback, поэтому там тоже нужен изменить тип возвращаемого значения и тело, чтоб оно возвращало нужный объект, в моем случае:
public final class SQLiteCustomFunction {
...
private String dispatchCallback(String[] args) {
return callback.callback(args);
}
}
Он же слишком generic и очень медленный? Вчера например парсил json в котором массив из 490 объектов, парс одного объекта занимал 0.2 секунды(iPhone 6+), т.е. на парс всего объекта ушло бы ~100 секунд, но к сожалению не хватило оперативы. Может я конечно что-то делал не так :)
Пример кода и замеры на симуляторе iPhone 7+, чтоб хватило оперативы на парс:
func parse(data: Data?) -> [Shop] {
var shops = [Shop]()
let date = Date()
if let data = data,
let jsonS = try? JSONSerialization.jsonObject(with: data, options: JSONSerialization.ReadingOptions(rawValue: 0)) as? [String: Any],
let dataz = jsonS?["dataz"] as? [String: [String: Any]] {
shops = dataz.flatMap({Shop(json: $1)})
}
print("simple parse \(date.timeIntervalSinceNow)")
print(shops.count)
return shops;
}
func parse(swiftyData: Data?) -> [Shop] {
var shops = [Shop]()
let date = Date()
if let data = swiftyData {
let json = JSON(data: data)
let dataz = json["dataz"]
shops = dataz.flatMap({Shop(switfyJSON: $1)})
}
print("swifty parse \(date.timeIntervalSinceNow)")
print(shops.count)
return shops;
}
490
swifty parse -28.3243499994278
490
Вчера столкнулся с подобно задачей задачей, есть небольшое замечание: jni берет сигнатуру метода с класса SQLiteCustomFunction метод dispatchCallback, поэтому там тоже нужен изменить тип возвращаемого значения и тело, чтоб оно возвращало нужный объект, в моем случае:
ps работал с этой версией исходников
Ссылка на источник, группу в вк?
cs405931.userapi.com/v405931147/3312/8fWptrb71e4.jpg
Для этого придумали делегаты и события :)
не пойму о чем ты! :D