Как проанализировать данные содержимого из Algolia, чтобы получить фактический объект Array в iOS swift? - PullRequest
0 голосов
/ 30 апреля 2020

Мне нужно получить список объектов, которые я храню в индексе Алголии. но я запутался, как получить массив объектов из контента в swift?

index.search(query, completionHandler: { (content, error) -> Void in

            if let error = error {
                print(error.localizedDescription)
                return
            }

            guard let content = content else {return}

            // what should I do in here to get Array Object from this content dictionary ????


 })

в Android Я обычно делаю что-то вроде этого

index.searchAsync(query) { content, exception ->


            if (exception != null) {
                // display error
            } else {

                val contentData = content ?: return@searchAsync
                val hits = contentData.getJSONArray("hits")


                // convert hits to list of EventKM object
                var events = ArrayList<EventKM>()


                for (i in 0 until hits.length()) {
                    val jsonObject = hits.getJSONObject(i)
                    val theEvent = EventKM(jsonObject)
                    events.add(theEvent)

                }

                // display events to UI
             }

}

1 Ответ

1 голос
/ 30 апреля 2020

Вы можете получить данные в hits

Итак, вот небольшой пример

struct CustomerSearch:Codable {
    var firstName: String?
    var lastName: String?
    var id:String?

    var objectID:String?
}
extension Array {
     var data: Data? {
    return try? JSONSerialization.data(withJSONObject: self, options: .prettyPrinted)
     }
}
// arrayOfCustomers.data will convert into Data so we can use JSONDecoder()

index.search(query, completionHandler: { (content, error) -> Void in

        guard error == nil , let res = content, let arrayOfCustomers = res["hits"] as? Array<[String:Any]>, let data = arrayOfCustomers.data else{
            return
        }
        self.myArray  = (try? JSONDecoder().decode(Array<CustomerSearch>.self, from:data)) ?? []
    })

Надеюсь, что это полезно

...