Утро все, Я слежу за примерами в отличной книге iOS Apps With REST APIs и, как результат, используя Alamofire и SwiftyJSON. Одна вещь, которую я не вижу в книге, заключается в том, как сортировать входящие объекты json в определенном порядке, например. Дата. Код, который я вложил ниже, отлично работает для того, чтобы потянуть json-объекты, но насколько я могу судить, они автоматически упорядочиваются созданным_by. Я хотел бы сортировать другом порядке, позволяет сказать, что мой класс был назван Растительные и имел имя атрибута, так что я мог сортировать что-то вроде:Сортировка JSON при использовании Alamofire и SwiftyJSON
.sort { $0.name < $1.name }
Начну с классом овощей в овоще. скор
class Vegetable: ResponseJSONObjectSerializable {
var id: Int?
var name : String?
var date: NSDate?
}
Внутри мой файл JSONSerializer я следующее, я не уверен, что я хотел бы изменить порядок прямо здесь, как я предпочел бы немного больше гибкости при каждом вызове.
public func responseArray<T: ResponseJSONObjectSerializable>(completionHandler: Response<[T], NSError> -> Void) -> Self {
let serializer = ResponseSerializer<[T], NSError> { request, response, data, error in
guard error == nil else {
return .Failure(error!)
}
guard let responseData = data else {
let failureReason = "Array could not be serialized because input data was nil."
let error = Error.errorWithCode(.DataSerializationFailed, failureReason: failureReason)
return .Failure(error)
}
let JSONResponseSerializer = Request.JSONResponseSerializer(options: .AllowFragments)
let result = JSONResponseSerializer.serializeResponse(request, response, responseData, error)
switch result {
case .Success(let value):
let json = SwiftyJSON.JSON(value)
var objects: [T] = []
for (_, item) in json {
if let object = T(json: item) {
objects.append(object)
}
}
return .Success(objects)
case .Failure(let error):
return .Failure(error)
}
}
return response(responseSerializer: serializer, completionHandler: completionHandler)
}
Тогда в моем APIManager У меня есть следующие функции
func getAllVegetables(completionHandler: (Result<[Vegetable], NSError>) -> Void) {
Alamofire.request(VegetableRouter.GetVegetables())
.responseArray { (response:Response<[Vegetable], NSError>) in
completionHandler(response.result)
}
}
Наконец, заполнить мою TableView у меня есть:
func loadVegetables() {
self.isLoading = true
VegetablesAPIManager.sharedInstance.getAllVegetables() {
result in
self.isLoading = false
if self.refreshControl.refreshing {
self.refreshControl.endRefreshing()
}
guard result.error == nil else {
print(result.error)
// TODO: Display Error
return
}
if let fetchedVegetables = result.value {
self.vegetables = fetchedVegetables
for vegetable in fetchedVegetables {
// Nothing here at the moment
}
}
self.tableView.reloadData()
}
}
Я признателен за любую помощь, которую я могу получить с этим, спасибо !
У вас есть свойство NSDate в вашем классе Овощной? –
Да, я просто добавил простой класс к моему вопросу для ясности. –